mirror of
https://gitlab.com/octospacc/WinDog.git
synced 2025-06-05 22:09:20 +02:00
Improve code structure, improve /help, /safebooru, /echo, add /lua
This commit is contained in:
82
LibWinDog/Platforms/Telegram/Telegram.py
Normal file
82
LibWinDog/Platforms/Telegram/Telegram.py
Normal file
@@ -0,0 +1,82 @@
|
||||
import telegram, telegram.ext
|
||||
from telegram import ForceReply, Bot
|
||||
from telegram.utils.helpers import escape_markdown
|
||||
from telegram.ext import CommandHandler, MessageHandler, Filters, CallbackContext
|
||||
|
||||
def TelegramCmdAllowed(update:telegram.Update) -> bool:
|
||||
if not TelegramRestrict:
|
||||
return True
|
||||
if TelegramRestrict.lower() == 'whitelist':
|
||||
if update.message.chat.id in TelegramWhitelist:
|
||||
return True
|
||||
return False
|
||||
|
||||
def TelegramHandleCmd(update:telegram.Update):
|
||||
TelegramQueryHandle(update)
|
||||
if TelegramCmdAllowed(update):
|
||||
return ParseCmd(update.message.text)
|
||||
else:
|
||||
return False
|
||||
|
||||
def TelegramQueryHandle(update:telegram.Update, context:CallbackContext=None) -> None:
|
||||
if not (update and update.message):
|
||||
return
|
||||
cmd = ParseCmd(update.message.text)
|
||||
if cmd:
|
||||
cmd.messageId = update.message.message_id
|
||||
cmd.TextPlain = cmd.Body
|
||||
cmd.TextMarkdown = update.message.text_markdown_v2
|
||||
cmd.Text = GetWeightedText((cmd.TextMarkdown, cmd.TextPlain))
|
||||
if cmd.Tokens[0][0] in CmdPrefixes and cmd.Name in Endpoints:
|
||||
cmd.User = SimpleNamespace(**{
|
||||
"Name": update.message.from_user.first_name,
|
||||
"Tag": update.message.from_user.username,
|
||||
"Id": f'{update.message.from_user.id}@telegram',
|
||||
})
|
||||
if update.message.reply_to_message:
|
||||
cmd.Quoted = SimpleNamespace(**{
|
||||
"messageId": update.message.reply_to_message.message_id,
|
||||
"Body": update.message.reply_to_message.text,
|
||||
"TextPlain": update.message.reply_to_message.text,
|
||||
"TextMarkdown": update.message.reply_to_message.text_markdown_v2,
|
||||
"Text": GetWeightedText((update.message.reply_to_message.text_markdown_v2, update.message.reply_to_message.text)),
|
||||
"User": SimpleNamespace(**{
|
||||
"Name": update.message.reply_to_message.from_user.first_name,
|
||||
"Tag": update.message.reply_to_message.from_user.username,
|
||||
"Id": f'{update.message.reply_to_message.from_user.id}@telegram',
|
||||
}),
|
||||
})
|
||||
Endpoints[cmd.Name]({"Event": update, "Manager": context}, cmd)
|
||||
if Debug and Dumper:
|
||||
Text = update.message.text
|
||||
Text = (Text.replace('\n', '\\n') if Text else '')
|
||||
with open('Dump.txt', 'a') as File:
|
||||
File.write(f'[{time.ctime()}] [{int(time.time())}] [{update.message.chat.id}] [{update.message.message_id}] [{update.message.from_user.id}] {Text}\n')
|
||||
|
||||
def TelegramSender(event, manager, Data, Destination, TextPlain, TextMarkdown) -> None:
|
||||
if Destination:
|
||||
manager.bot.send_message(Destination, text=TextPlain)
|
||||
else:
|
||||
replyToId = (Data["ReplyTo"] if ("ReplyTo" in Data and Data["ReplyTo"]) else event.message.message_id)
|
||||
if InDict(Data, 'Media'):
|
||||
event.message.reply_photo(
|
||||
Data['Media'],
|
||||
caption=(TextMarkdown if TextMarkdown else TextPlain if TextPlain else None),
|
||||
parse_mode=('MarkdownV2' if TextMarkdown else None),
|
||||
reply_to_message_id=replyToId,
|
||||
)
|
||||
elif TextMarkdown:
|
||||
event.message.reply_markdown_v2(TextMarkdown, reply_to_message_id=replyToId)
|
||||
elif TextPlain:
|
||||
event.message.reply_text(TextPlain, reply_to_message_id=replyToId)
|
||||
|
||||
def TelegramMain() -> None:
|
||||
if not TelegramToken:
|
||||
return
|
||||
updater = telegram.ext.Updater(TelegramToken)
|
||||
dispatcher = updater.dispatcher
|
||||
dispatcher.add_handler(MessageHandler(Filters.text | Filters.command, TelegramQueryHandle))
|
||||
updater.start_polling()
|
||||
|
||||
RegisterPlatform(name="Telegram", main=TelegramMain, sender=TelegramSender, eventClass=telegram.Update)
|
||||
|
Reference in New Issue
Block a user