Source code for quackamollie.core.bot.bot_info
# -*- coding: utf-8 -*-
__all__ = ["QuackamollieBotData"]
__author__ = "QuacktorAI"
__copyright__ = "Copyright 2024, Forge of Absurd Ducks"
__credits__ = ["QuacktorAI"]
from aiogram import Bot
from aiogram.types import User
from typing import Optional
from quackamollie.core.bot.utils.bot_utils import ContextLock
from quackamollie.core.utils.singleton import Singleton
from quackamollie.core.utils.str_management import sanitize_username
class QuackamollieBotDataBaseClass:
""" This is an information object that is exposed as a singleton to keep dynamically loaded common bot info """
BOT_DATA_LOCK: ContextLock = ContextLock() # A lock to access and modify the class data asynchronously
def __init__(self):
self._bot_info: Optional[User] = None
self._bot_id: Optional[int] = None
self._bot_full_name: Optional[str] = None
self._bot_username: Optional[str] = None
self._bot_first_name: Optional[str] = None
self._bot_last_name: Optional[str] = None
self._bot_mention: Optional[str] = None
async def load_bot_info(self, bot: Bot):
""" Async loading of the bot info and save fields into current instance """
bot_info = await bot.get_me()
self._bot_info = bot_info
self._bot_id = bot_info.id
self._bot_full_name = sanitize_username(bot_info.full_name)
self._bot_username = bot_info.username
self._bot_first_name = sanitize_username(bot_info.first_name)
self._bot_last_name = sanitize_username(bot_info.last_name)
self._bot_mention = f"@{self._bot_username}"
@property
def bot_info(self) -> Optional[User]:
return self._bot_info
@property
def bot_id(self) -> Optional[int]:
return self._bot_id
@property
def bot_full_name(self) -> Optional[str]:
return self._bot_full_name
@property
def bot_username(self) -> Optional[str]:
return self._bot_username
@property
def bot_first_name(self) -> Optional[str]:
return self._bot_first_name
@property
def bot_last_name(self) -> Optional[str]:
return self._bot_last_name
@property
def bot_mention(self) -> Optional[str]:
return self._bot_mention
[docs]
class QuackamollieBotData(QuackamollieBotDataBaseClass, metaclass=Singleton):
""" Singleton that stores bot additional info to dynamically retrieve and loaded at startup """
pass