mirror of
https://github.com/Nick80835/microbot
synced 2025-08-28 13:08:42 +00:00
improve type hinting/doc a bit
This commit is contained in:
parent
8857b4710d
commit
c799f34f89
@ -4,13 +4,15 @@ from logging import INFO, basicConfig, getLogger
|
|||||||
from time import time
|
from time import time
|
||||||
|
|
||||||
import telethon
|
import telethon
|
||||||
|
from telethon import TelegramClient
|
||||||
from telethon.errors.rpcerrorlist import (AccessTokenExpiredError,
|
from telethon.errors.rpcerrorlist import (AccessTokenExpiredError,
|
||||||
AccessTokenInvalidError,
|
AccessTokenInvalidError,
|
||||||
TokenInvalidError)
|
TokenInvalidError)
|
||||||
from telethon.network.connection.tcpabridged import \
|
from telethon.network.connection.tcpabridged import \
|
||||||
ConnectionTcpAbridged as CTA
|
ConnectionTcpAbridged as CTA
|
||||||
|
|
||||||
from .custom import ExtendedEvent
|
from .custom import (ExtendedCallbackQuery, ExtendedInlineQuery,
|
||||||
|
ExtendedNewMessage)
|
||||||
from .loader import Loader
|
from .loader import Loader
|
||||||
from .settings import Settings
|
from .settings import Settings
|
||||||
|
|
||||||
@ -26,9 +28,9 @@ loop = asyncio.get_event_loop()
|
|||||||
|
|
||||||
class MicroBot():
|
class MicroBot():
|
||||||
settings = Settings()
|
settings = Settings()
|
||||||
client = None
|
logger = logger
|
||||||
logger = None
|
client: TelegramClient
|
||||||
loader = None
|
loader: Loader
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
loop.run_until_complete(self._initialize_bot())
|
loop.run_until_complete(self._initialize_bot())
|
||||||
@ -37,7 +39,7 @@ class MicroBot():
|
|||||||
global ldr
|
global ldr
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.client = await telethon.TelegramClient(
|
self.client = await TelegramClient(
|
||||||
self.settings.get_config("session_name", "bot0") or "bot0",
|
self.settings.get_config("session_name", "bot0") or "bot0",
|
||||||
self.settings.get_config("api_id"),
|
self.settings.get_config("api_id"),
|
||||||
self.settings.get_config("api_hash"),
|
self.settings.get_config("api_hash"),
|
||||||
@ -76,7 +78,10 @@ class MicroBot():
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
|
||||||
telethon.events.NewMessage.Event = ExtendedEvent
|
telethon.events.NewMessage.Event = ExtendedNewMessage
|
||||||
|
telethon.events.CallbackQuery.Event = ExtendedCallbackQuery
|
||||||
|
telethon.events.InlineQuery.Event = ExtendedInlineQuery
|
||||||
|
|
||||||
micro_bot = MicroBot()
|
micro_bot = MicroBot()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -8,6 +8,11 @@ from telethon import events
|
|||||||
from telethon.errors.rpcerrorlist import (ChatAdminRequiredError,
|
from telethon.errors.rpcerrorlist import (ChatAdminRequiredError,
|
||||||
ChatWriteForbiddenError)
|
ChatWriteForbiddenError)
|
||||||
|
|
||||||
|
from ubot.command import CallbackQueryCommand, Command
|
||||||
|
from ubot.custom import (ExtendedCallbackQuery, ExtendedInlineQuery,
|
||||||
|
ExtendedNewMessage)
|
||||||
|
from ubot.database import ChatWrapper
|
||||||
|
|
||||||
from .fixes import inline_photos
|
from .fixes import inline_photos
|
||||||
|
|
||||||
|
|
||||||
@ -39,7 +44,7 @@ class CommandHandler():
|
|||||||
if not isinstance(exception, (ChatAdminRequiredError, ChatWriteForbiddenError)):
|
if not isinstance(exception, (ChatAdminRequiredError, ChatWriteForbiddenError)):
|
||||||
await event.client.send_message(int(self.settings.get_list("owner_id")[0]), str(format_exc()))
|
await event.client.send_message(int(self.settings.get_list("owner_id")[0]), str(format_exc()))
|
||||||
|
|
||||||
async def handle_incoming(self, event):
|
async def handle_incoming(self, event: ExtendedNewMessage):
|
||||||
chat_db = self.db.get_chat((await event.get_chat()).id)
|
chat_db = self.db.get_chat((await event.get_chat()).id)
|
||||||
chat_prefix = chat_db.prefix
|
chat_prefix = chat_db.prefix
|
||||||
|
|
||||||
@ -100,7 +105,7 @@ class CommandHandler():
|
|||||||
|
|
||||||
await self.execute_command(event, command)
|
await self.execute_command(event, command)
|
||||||
|
|
||||||
async def handle_inline(self, event):
|
async def handle_inline(self, event: ExtendedInlineQuery):
|
||||||
for command in self.inline_photo_commands:
|
for command in self.inline_photo_commands:
|
||||||
pattern_match = search(self.simple_pattern_template.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
pattern_match = search(self.simple_pattern_template.format(command.pattern + command.pattern_extra), event.text, IGNORECASE|DOTALL)
|
||||||
|
|
||||||
@ -123,7 +128,7 @@ class CommandHandler():
|
|||||||
|
|
||||||
await self.fallback_inline(event)
|
await self.fallback_inline(event)
|
||||||
|
|
||||||
async def handle_inline_photo(self, event, pattern_match, command):
|
async def handle_inline_photo(self, event: ExtendedInlineQuery, pattern_match, command):
|
||||||
builder = event.builder
|
builder = event.builder
|
||||||
event.pattern_match = pattern_match
|
event.pattern_match = pattern_match
|
||||||
event.args = pattern_match.groups()[-1]
|
event.args = pattern_match.groups()[-1]
|
||||||
@ -166,7 +171,7 @@ class CommandHandler():
|
|||||||
except:
|
except:
|
||||||
print_exc()
|
print_exc()
|
||||||
|
|
||||||
async def handle_inline_article(self, event, pattern_match, command):
|
async def handle_inline_article(self, event: ExtendedInlineQuery, pattern_match, command):
|
||||||
builder = event.builder
|
builder = event.builder
|
||||||
event.pattern_match = pattern_match
|
event.pattern_match = pattern_match
|
||||||
event.args = pattern_match.groups()[-1]
|
event.args = pattern_match.groups()[-1]
|
||||||
@ -204,7 +209,7 @@ class CommandHandler():
|
|||||||
except:
|
except:
|
||||||
print_exc()
|
print_exc()
|
||||||
|
|
||||||
async def handle_callback_query(self, event):
|
async def handle_callback_query(self, event: ExtendedCallbackQuery):
|
||||||
data_str = event.data.decode("utf-8")
|
data_str = event.data.decode("utf-8")
|
||||||
data_id = data_str.split("*")[0]
|
data_id = data_str.split("*")[0]
|
||||||
data_data = data_str.removeprefix(data_id + "*")
|
data_data = data_str.removeprefix(data_id + "*")
|
||||||
@ -283,7 +288,7 @@ class CommandHandler():
|
|||||||
|
|
||||||
# returns True if the command can be used, False if not, and an optional error string together in a tuple
|
# returns True if the command can be used, False if not, and an optional error string together in a tuple
|
||||||
# for normal commands, this will be passed to event.reply; for callback queries this will call event.answer
|
# for normal commands, this will be passed to event.reply; for callback queries this will call event.answer
|
||||||
async def check_privs(self, event, command, chat_db = None, callback_query = False) -> tuple[bool, str|None]:
|
async def check_privs(self, event, command: Command|CallbackQueryCommand, chat_db: ChatWrapper|None = None, callback_query = False) -> tuple[bool, str|None]:
|
||||||
if self.is_blacklisted(event) and not self.is_owner(event) and not self.is_sudo(event):
|
if self.is_blacklisted(event) and not self.is_owner(event) and not self.is_sudo(event):
|
||||||
return (False, None)
|
return (False, None)
|
||||||
|
|
||||||
@ -301,10 +306,10 @@ class CommandHandler():
|
|||||||
if event.is_private or not (await event.client.get_permissions(event.chat, event.sender_id)).is_admin and not self.is_sudo(event) and not self.is_owner(event):
|
if event.is_private or not (await event.client.get_permissions(event.chat, event.sender_id)).is_admin and not self.is_sudo(event) and not self.is_owner(event):
|
||||||
return (False, None if command.silent_bail else "You lack the permissions to use that command!")
|
return (False, None if command.silent_bail else "You lack the permissions to use that command!")
|
||||||
|
|
||||||
if not callback_query and event.chat and command.nsfw and not chat_db.nsfw_enabled:
|
if not callback_query and event.chat and command.nsfw and (chat_db and not chat_db.nsfw_enabled):
|
||||||
return (False, None if command.silent_bail else command.nsfw_warning or "NSFW commands are disabled in this chat!")
|
return (False, None if command.silent_bail else command.nsfw_warning or "NSFW commands are disabled in this chat!")
|
||||||
|
|
||||||
if not callback_query and event.chat and command.fun and not chat_db.fun_enabled:
|
if not callback_query and event.chat and command.fun and (chat_db and not chat_db.fun_enabled):
|
||||||
return (False, None)
|
return (False, None)
|
||||||
|
|
||||||
return (True, None)
|
return (True, None)
|
||||||
|
@ -1,10 +1,29 @@
|
|||||||
|
from re import Match
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from telethon.events.callbackquery import CallbackQuery
|
||||||
|
from telethon.events.inlinequery import InlineQuery
|
||||||
from telethon.events.newmessage import NewMessage
|
from telethon.events.newmessage import NewMessage
|
||||||
from telethon.tl.types import (DocumentAttributeFilename,
|
from telethon.tl.types import (DocumentAttributeFilename,
|
||||||
DocumentAttributeImageSize,
|
DocumentAttributeImageSize,
|
||||||
DocumentAttributeSticker)
|
DocumentAttributeSticker)
|
||||||
|
|
||||||
|
from ubot.command import (CallbackQueryCommand, Command, InlineArticleCommand,
|
||||||
|
InlinePhotoCommand)
|
||||||
|
from ubot.database import ChatWrapper
|
||||||
|
|
||||||
|
|
||||||
|
class ExtendedNewMessage(NewMessage.Event):
|
||||||
|
pattern_match: Match[str] # pattern match as returned by re.search when it's used in the command handler
|
||||||
|
chat_db: ChatWrapper # database reference for the chat this command was executed in
|
||||||
|
object: Command # the object constructed when the command associated with this event was added
|
||||||
|
command: str # the base command with no prefix, no args and no other_args; the whole pattern if raw_pattern is used
|
||||||
|
prefix: str # prefix used to call this command, such as "/" or "g."; not set if simple_pattern is used
|
||||||
|
extra: Any # any object you set to extra when registering the command associated with this event
|
||||||
|
args: str # anything after the command itself and any groups caught in other_args, such as booru tags
|
||||||
|
other_args: tuple # any groups between the args group and the command itself
|
||||||
|
nsfw_disabled: bool # only set if pass_nsfw is True; this value is the opposite of nsfw_enabled in chat_db
|
||||||
|
|
||||||
class ExtendedEvent(NewMessage.Event):
|
|
||||||
async def get_text(self, return_msg=False, default=""):
|
async def get_text(self, return_msg=False, default=""):
|
||||||
if self.args:
|
if self.args:
|
||||||
if return_msg:
|
if return_msg:
|
||||||
@ -58,3 +77,23 @@ class ExtendedEvent(NewMessage.Event):
|
|||||||
return await self.message.respond(*args, **kwargs|{"reply_to": self.reply_to.reply_to_msg_id})
|
return await self.message.respond(*args, **kwargs|{"reply_to": self.reply_to.reply_to_msg_id})
|
||||||
|
|
||||||
return await self.message.respond(*args, **kwargs)
|
return await self.message.respond(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class ExtendedCallbackQuery(CallbackQuery.Event):
|
||||||
|
chat_db: ChatWrapper|None
|
||||||
|
object: CallbackQueryCommand
|
||||||
|
command: str
|
||||||
|
extra: Any
|
||||||
|
args: str
|
||||||
|
|
||||||
|
|
||||||
|
class ExtendedInlineQuery(InlineQuery.Event):
|
||||||
|
pattern_match: Match[str]
|
||||||
|
parse_mode: str
|
||||||
|
object: InlineArticleCommand|InlinePhotoCommand
|
||||||
|
command: str
|
||||||
|
extra: Any
|
||||||
|
args: str
|
||||||
|
other_args: tuple
|
||||||
|
nsfw_disabled: bool
|
||||||
|
link_preview: bool
|
||||||
|
Loading…
x
Reference in New Issue
Block a user