magic-wand_4/main_module.py

94 lines
3.3 KiB
Python
Raw Normal View History

2021-06-14 17:05:26 +03:00
# Demo bot module v1.00
# 14/06/2021
# https://t.me/ssleg © 2020 2021
import logging
from telethon import TelegramClient, events
import bot_io
from bot_io import BotIncomingMessagesOrder
from tg_utils import GlobalFlag, GlobalCounter, set_int_printable
debug = GlobalFlag()
messages_count = GlobalCounter()
client: TelegramClient
ordnung = BotIncomingMessagesOrder()
admins_ids = []
# хэндлер входящих сообщений
async def mytask(event):
mess = event.message
from_id = mess.peer_id.user_id
txt = mess.text
# антиспам
mess_status = ordnung.new_mess(mess)
if mess_status == 1 or mess_status == 2:
return
elif mess_status == 3:
mess = 'Вы забанены на полчаса за частые обращения к боту (чаще команды в секунду или 4х за 5 сек.).'
await bot_io.send_reply_message(from_id, mess, contact_add=False)
levent = 'пользователь забанен на полчаса - ' + str(from_id)
logging.warning(levent)
return
elif mess_status == 4:
mess = 'Вы забанены на месяц за повторные частые обращения к боту (чаще команды в секунду или 4х за 5 сек.).'
await bot_io.send_reply_message(from_id, mess, contact_add=False)
levent = 'пользователь забанен на месяц - ' + str(from_id)
logging.warning(levent)
return
txt = txt.lower()
txt = txt.replace(' ', '')
# проверка на команду от админа, ee обрабатывает основная программа
# см. magic.py admins_command()
if from_id in admins_ids:
if txt == '-mw' or txt.find('-send') == 0:
return
messages_count.increment()
# стартовое приветствие (когда пользователь нажимает кнопку старт).
if txt == '/start':
mess = 'Привет!'
await bot_io.send_reply_message(from_id, mess)
return
# здесь место для вашего кода. обработайте входящее сообщение и ответьте пользователю.
# всегда используйте функцию bot_io для отправки ответов, это предохранит вас от бана телеграм.
mess = 'ваш user_id: ' + set_int_printable(from_id) + '\n'
mess += 'а я больше ничего не умею.'
await bot_io.send_reply_message(from_id, mess)
# инициализация модуля
async def init(cli, debug_mode, adm_ids):
global client
global admins_ids
client = cli
admins_ids = adm_ids
if debug_mode:
debug.set_true()
client.add_event_handler(mytask, events.NewMessage(incoming=True))
levent = 'основной модуль стартовал.'
logging.info(levent)
# выдача "наверх" статистики работы
def status():
mess = 'выполнено запросов - ' + str(messages_count) + '\n'
return mess
# завершение работы
async def terminate():
levent = 'основной модуль остановлен. выполнил запросов - ' + str(messages_count)
logging.info(levent)