-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path_example.py
109 lines (91 loc) · 6.72 KB
/
_example.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# Sh1t-UB (telegram userbot by sh1tn3t)
# Copyright (C) 2021-2022 Sh1tN3t
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import logging
from asyncio import sleep
from aiogram.types import (
Message,
CallbackQuery,
InlineQuery,
InlineQueryResultArticle,
InputTextMessageContent,
InlineKeyboardMarkup,
InlineKeyboardButton
)
from pyrogram import Client, types
from .. import loader, utils # ".." - т.к. модули находятся в папке sh1t-ub/modules, то нам нужно на уровень выше
# loader, modules, bot - файлы из папки sh1t-ub
@loader.module(name="Example", author="sh1tn3t", version=1) # name модуля ("name" обязательный аргумент, остальное — нет), author - автор, version - версия
class ExampleMod(loader.Module): # Example - название класса модуля
# Mod в конце названия обязательно
"""Описание модуля"""
def __init__(self):
self.test_attribute = "Это атрибут модуля"
async def on_load(self, app: Client): # Можно считать что это асинхронный __init__
"""Вызывается когда модуль загружен"""
logging.info(f"Модуль {self.name} загружен")
# Если написать в лс/чате где есть бот "ты дурак?", то он ответит
@loader.on_bot(lambda self, app, message: message.text and message.text.lower() == "ты дурак?") # Сработает только если текст сообщения равняется "ты дурак?"
async def example_message_handler(self, app: Client, message: Message): # _message_handler на конце функции чтобы обозначить что это хендлер сообщения
"""Пример хендлера сообщения"""
return await message.reply(
"Сам такой!")
async def example_inline_handler(self, app: Client, inline_query: InlineQuery, args: str): # _inline_handler на конце функции чтобы обозначить что это инлайн-команда
# args - аргументы после команды. необязательный аргумент
"""Пример инлайн-команды. Использование: @bot example [аргументы]"""
await inline_query.answer(
[
InlineQueryResultArticle(
id=utils.random_id(),
title="Тайтл",
description="Нажми на меня!" + (
f" Аргументы: {args}" if args
else ""
),
input_message_content=InputTextMessageContent(
"Текст после нажатия на кнопку"),
reply_markup=InlineKeyboardMarkup().add(
InlineKeyboardButton("Текст кнопки", callback_data="example_button_callback"))
)
]
)
@loader.on_bot(lambda self, app, call: call.data == "example_button_callback") # Сработает только если каллбек дата равняется "example_button_callback"
async def example_callback_handler(self, app: Client, call: CallbackQuery): # _callback_handler на конце функции чтобы обозначить что это каллбек-хендлер
"""Пример каллбека"""
return await call.answer(
"Ого пример каллбека", show_alert=True)
async def example_cmd(self, app: Client, message: types.Message, args: str): # _cmd на конце функции чтобы обозначить что это команда
# args - аргументы после команды. необязательный аргумент
"""Описание команды. Использование: example [аргументы]"""
await utils.answer( # utils.answer - это круто
message, "Ого пример команды" + (
f"\nАргументы: {args}" if args
else ""
)
)
await sleep(2.5) # никогда не используй time.sleep, потому что это не асинхронная функция, она остановит весь юзербот
return await utils.answer(
message, "Прошло 2.5 секунды!")
@loader.on(lambda _, __, m: "тест" in getattr(m, "text", "")) # Сработает только если есть "тест" в сообщении с командой
async def example2_cmd(self, app: Client, message: types.Message):
"""Описание для второй команды с фильтрами"""
return await utils.answer(
message, f"Да, {self.test_attribute = }")
@loader.on(lambda _, __, m: m and m.text == "Привет, это проверка вотчера щит-юб")
async def watcher(self, app: Client, message: types.Message): # watcher - функция которая работает при получении нового сообщения
return await message.reply(
"Привет, все работает отлично")
# Можно добавлять несколько вотчеров, главное чтобы функция начиналась с "watcher"
async def watcher_(self, app: Client, message: types.Message):
if message.text == "Привет, это проверка второго вотчера щит-юб":
return await message.reply(
"И тебе привет!")