Improved locales, added /language
This commit is contained in:
52
classes/callbacks.py
Normal file
52
classes/callbacks.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from pyrogram.types import CallbackQuery
|
||||
|
||||
|
||||
@dataclass
|
||||
class CallbackVerify:
|
||||
user_id: int
|
||||
|
||||
@classmethod
|
||||
def from_callback(cls, callback: CallbackQuery):
|
||||
action, user_id = str(callback.data).split(";")
|
||||
if action.lower() != "verify":
|
||||
raise ValueError("Callback provided is not a verification callback")
|
||||
return cls(int(user_id))
|
||||
|
||||
|
||||
@dataclass
|
||||
class CallbackEmoji:
|
||||
user_id: int
|
||||
emoji: str
|
||||
|
||||
@classmethod
|
||||
def from_callback(cls, callback: CallbackQuery):
|
||||
action, user_id, emoji = str(callback.data).split(";")
|
||||
if action.lower() != "emoji":
|
||||
raise ValueError("Callback provided is not an emoji button callback")
|
||||
return cls(int(user_id), emoji)
|
||||
|
||||
|
||||
@dataclass
|
||||
class CallbackBan:
|
||||
user_id: int
|
||||
|
||||
@classmethod
|
||||
def from_callback(cls, callback: CallbackQuery):
|
||||
action, user_id = str(callback.data).split(";")
|
||||
if action.lower() != "ban":
|
||||
raise ValueError("Callback provided is not a ban callback")
|
||||
return cls(int(user_id))
|
||||
|
||||
|
||||
@dataclass
|
||||
class CallbackLanguage:
|
||||
language: str
|
||||
|
||||
@classmethod
|
||||
def from_callback(cls, callback: CallbackQuery):
|
||||
action, language = str(callback.data).split(";")
|
||||
if action.lower() != "language":
|
||||
raise ValueError("Callback provided is not a language callback")
|
||||
return cls(language)
|
@@ -18,7 +18,7 @@ class PyroClient(PyroClient):
|
||||
### Returns:
|
||||
* `PyroUser`: PyroUser object
|
||||
"""
|
||||
db_record = col_users.find_one(
|
||||
db_record = await col_users.find_one(
|
||||
{"id": user.id if isinstance(user, User) else user, "group": group}
|
||||
)
|
||||
|
||||
|
72
classes/pyrogroup.py
Normal file
72
classes/pyrogroup.py
Normal file
@@ -0,0 +1,72 @@
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Union
|
||||
|
||||
from bson import ObjectId
|
||||
from pyrogram.types import User
|
||||
|
||||
from classes.pyroclient import PyroClient
|
||||
from modules.database import col_groups
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@dataclass
|
||||
class PyroGroup:
|
||||
"""Dataclass of DB entry of a group"""
|
||||
|
||||
__slots__ = ("_id", "id", "locale", "locale_auto")
|
||||
|
||||
_id: ObjectId
|
||||
id: int
|
||||
locale: Union[str, None]
|
||||
locale_auto: bool
|
||||
|
||||
@classmethod
|
||||
async def create_if_not_exists(
|
||||
cls,
|
||||
id: int,
|
||||
locale: Union[str, None] = None,
|
||||
locale_auto: bool = True,
|
||||
):
|
||||
db_entry = await col_groups.find_one(
|
||||
{
|
||||
"id": id,
|
||||
}
|
||||
)
|
||||
if db_entry is None:
|
||||
inserted = await col_groups.insert_one(
|
||||
{"id": id, "locale": locale, "locale_auto": locale_auto}
|
||||
)
|
||||
db_entry = {
|
||||
"_id": inserted.inserted_id,
|
||||
"id": id,
|
||||
"locale": locale,
|
||||
"locale_auto": locale_auto,
|
||||
}
|
||||
return cls(**db_entry)
|
||||
|
||||
async def set_locale(self, locale: Union[str, None]) -> None:
|
||||
logger.debug("Locale of group %s has been set to %s", self.id, locale)
|
||||
await col_groups.update_one({"_id": self._id}, {"$set": {"locale": locale}})
|
||||
|
||||
async def set_locale_auto(self, enabled: bool) -> None:
|
||||
logger.debug(
|
||||
"Automatic locale selection of group %s has been set to %s",
|
||||
self.id,
|
||||
enabled,
|
||||
)
|
||||
await col_groups.update_one(
|
||||
{"_id": self._id}, {"$set": {"locale_auto": enabled}}
|
||||
)
|
||||
|
||||
# Group settings
|
||||
# User locale
|
||||
def select_locale(
|
||||
self, app: PyroClient, user: Union[User, None] = None, ignore_auto: bool = False
|
||||
) -> str:
|
||||
if not ignore_auto and self.locale_auto is True:
|
||||
if user.language_code is not None:
|
||||
return user.language_code
|
||||
return self.locale if self.locale is not None else app.default_locale
|
||||
return self.locale if self.locale is not None else app.default_locale
|
@@ -34,7 +34,7 @@ class PyroUser:
|
||||
mistakes: int
|
||||
|
||||
@classmethod
|
||||
def create_if_not_exists(
|
||||
async def create_if_not_exists(
|
||||
cls,
|
||||
id: int,
|
||||
group: int,
|
||||
@@ -44,9 +44,9 @@ class PyroUser:
|
||||
score: int = 0,
|
||||
mistakes: int = 0,
|
||||
):
|
||||
db_entry = col_users.find_one({"id": id, "group": group})
|
||||
db_entry = await col_users.find_one({"id": id, "group": group})
|
||||
if db_entry is None:
|
||||
inserted = col_users.insert_one(
|
||||
inserted = await col_users.insert_one(
|
||||
{
|
||||
"id": id,
|
||||
"group": group,
|
||||
@@ -69,36 +69,36 @@ class PyroUser:
|
||||
}
|
||||
return cls(**db_entry)
|
||||
|
||||
def set_failed(self, failed: bool = True) -> None:
|
||||
async def set_failed(self, failed: bool = True) -> None:
|
||||
logger.debug("%s's failure state has been set to %s", self.id, failed)
|
||||
col_users.update_one({"_id": self._id}, {"$set": {"failed": failed}})
|
||||
await col_users.update_one({"_id": self._id}, {"$set": {"failed": failed}})
|
||||
|
||||
def set_emojis(self, emojis: List[str]) -> None:
|
||||
async def set_emojis(self, emojis: List[str]) -> None:
|
||||
logger.debug("%s's emojis have been set to %s", self.id, emojis)
|
||||
col_users.update_one({"_id": self._id}, {"$set": {"emojis": emojis}})
|
||||
await col_users.update_one({"_id": self._id}, {"$set": {"emojis": emojis}})
|
||||
|
||||
def set_score(self, score: int = 0) -> None:
|
||||
async def set_score(self, score: int = 0) -> None:
|
||||
logger.debug("%s's score has been set to %s", self.id, score)
|
||||
col_users.update_one({"_id": self._id}, {"$set": {"score": score}})
|
||||
await col_users.update_one({"_id": self._id}, {"$set": {"score": score}})
|
||||
|
||||
def set_mistakes(self, mistakes: int = 0) -> None:
|
||||
async def set_mistakes(self, mistakes: int = 0) -> None:
|
||||
logger.debug("%s's mistakes count has been set to %s", self.id, mistakes)
|
||||
col_users.update_one({"_id": self._id}, {"$set": {"mistakes": mistakes}})
|
||||
await col_users.update_one({"_id": self._id}, {"$set": {"mistakes": mistakes}})
|
||||
|
||||
def update_score(self, points: int = 1) -> None:
|
||||
async def update_score(self, points: int = 1) -> None:
|
||||
logger.debug("%s point(s) have been added to %s score", points, self.id)
|
||||
col_users.update_one(
|
||||
await col_users.update_one(
|
||||
{"_id": self._id}, {"$set": {"score": self.score + points}}
|
||||
)
|
||||
|
||||
def update_mistakes(self, points: int = 1) -> None:
|
||||
async def update_mistakes(self, points: int = 1) -> None:
|
||||
logger.debug("%s point(s) have been added to %s mistakes", points, self.id)
|
||||
col_users.update_one(
|
||||
await col_users.update_one(
|
||||
{"_id": self._id}, {"$set": {"mistakes": self.mistakes + points}}
|
||||
)
|
||||
|
||||
def update_selected(self, entry: str) -> None:
|
||||
async def update_selected(self, entry: str) -> None:
|
||||
logger.debug("Emoji %s has been added to %s's selection list", entry, self.id)
|
||||
col_users.update_one(
|
||||
await col_users.update_one(
|
||||
{"_id": self._id}, {"$set": {"selected": self.selected + [entry]}}
|
||||
)
|
||||
|
Reference in New Issue
Block a user