2024-06-17 00:32:03 +02:00
|
|
|
# ================================== #
|
|
|
|
# WinDog multi-purpose chatbot #
|
|
|
|
# Licensed under AGPLv3 by OctoSpacc #
|
|
|
|
# ================================== #
|
|
|
|
|
2024-06-19 01:40:33 +02:00
|
|
|
""" # windog config start #
|
|
|
|
|
|
|
|
# TelegramToken = "1234567890:abcdefghijklmnopqrstuvwxyz123456789"
|
|
|
|
|
|
|
|
# end windog config # """
|
|
|
|
|
2024-06-17 00:32:03 +02:00
|
|
|
TelegramToken = None
|
|
|
|
|
2024-06-15 02:08:09 +02:00
|
|
|
import telegram, telegram.ext
|
2024-06-19 01:40:33 +02:00
|
|
|
from telegram import ForceReply, Bot #, Update
|
|
|
|
#from telegram.helpers import escape_markdown
|
|
|
|
#from telegram.ext import Application, filters, CommandHandler, MessageHandler, CallbackContext
|
2024-06-15 02:08:09 +02:00
|
|
|
from telegram.utils.helpers import escape_markdown
|
|
|
|
from telegram.ext import CommandHandler, MessageHandler, Filters, CallbackContext
|
|
|
|
|
2024-06-17 00:32:03 +02:00
|
|
|
def TelegramMain() -> bool:
|
|
|
|
if not TelegramToken:
|
2024-06-15 02:08:09 +02:00
|
|
|
return False
|
2024-06-17 00:32:03 +02:00
|
|
|
updater = telegram.ext.Updater(TelegramToken)
|
|
|
|
dispatcher = updater.dispatcher
|
2024-06-19 01:40:33 +02:00
|
|
|
dispatcher.add_handler(MessageHandler(Filters.text | Filters.command, TelegramHandlerWrapper))
|
2024-06-17 00:32:03 +02:00
|
|
|
updater.start_polling()
|
2024-06-19 01:40:33 +02:00
|
|
|
#app = Application.builder().token(TelegramToken).build()
|
|
|
|
#app.add_handler(MessageHandler(filters.TEXT | filters.COMMAND, TelegramHandler))
|
|
|
|
#app.run_polling(allowed_updates=Update.ALL_TYPES)
|
2024-06-17 00:32:03 +02:00
|
|
|
return True
|
2024-06-15 02:08:09 +02:00
|
|
|
|
2024-06-19 01:40:33 +02:00
|
|
|
def TelegramHandlerWrapper(update:telegram.Update, context:CallbackContext=None) -> None:
|
|
|
|
Thread(target=lambda:TelegramHandlerCore(update, context)).start()
|
|
|
|
|
|
|
|
def TelegramHandlerCore(update:telegram.Update, context:CallbackContext=None) -> None:
|
|
|
|
if not update.message:
|
2024-06-15 02:08:09 +02:00
|
|
|
return
|
2024-06-19 01:40:33 +02:00
|
|
|
data = SimpleNamespace()
|
|
|
|
data.room_id = f"{update.message.chat.id}@telegram"
|
|
|
|
data.message_id = f"{update.message.message_id}@telegram"
|
|
|
|
data.text_plain = update.message.text
|
|
|
|
data.text_markdown = update.message.text_markdown_v2
|
|
|
|
data.text_auto = GetWeightedText(data.text_markdown, data.text_plain)
|
|
|
|
data.command = ParseCommand(data.text_plain)
|
|
|
|
data.user = SimpleNamespace()
|
|
|
|
data.user.name = update.message.from_user.first_name
|
|
|
|
data.user.tag = update.message.from_user.username
|
|
|
|
data.user.id = f"{update.message.from_user.id}@telegram"
|
|
|
|
OnMessageParsed(data)
|
2024-06-16 01:40:30 +02:00
|
|
|
cmd = ParseCmd(update.message.text)
|
|
|
|
if cmd:
|
2024-06-19 01:40:33 +02:00
|
|
|
cmd.command = data.command
|
2024-06-16 01:40:30 +02:00
|
|
|
cmd.messageId = update.message.message_id
|
|
|
|
cmd.TextPlain = cmd.Body
|
|
|
|
cmd.TextMarkdown = update.message.text_markdown_v2
|
2024-06-19 01:40:33 +02:00
|
|
|
cmd.Text = GetWeightedText(cmd.TextMarkdown, cmd.TextPlain)
|
2024-06-16 01:40:30 +02:00
|
|
|
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',
|
2024-06-15 02:08:09 +02:00
|
|
|
})
|
2024-06-16 01:40:30 +02:00
|
|
|
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,
|
2024-06-19 01:40:33 +02:00
|
|
|
"Text": GetWeightedText(update.message.reply_to_message.text_markdown_v2, update.message.reply_to_message.text),
|
2024-06-16 01:40:30 +02:00
|
|
|
"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',
|
|
|
|
}),
|
|
|
|
})
|
2024-06-19 01:40:33 +02:00
|
|
|
Endpoints[cmd.Name]["handler"]({"Event": update, "Manager": context}, cmd)
|
2024-06-15 02:08:09 +02:00
|
|
|
|
2024-06-19 01:40:33 +02:00
|
|
|
def TelegramSender(event, manager, data, destination, textPlain, textMarkdown) -> None:
|
|
|
|
if destination:
|
|
|
|
manager.bot.send_message(destination, text=textPlain)
|
2024-06-15 02:08:09 +02:00
|
|
|
else:
|
2024-06-19 01:40:33 +02:00
|
|
|
replyToId = (data["ReplyTo"] if ("ReplyTo" in data and data["ReplyTo"]) else event.message.message_id)
|
|
|
|
if InDict(data, "Media") and not InDict(data, "media"):
|
|
|
|
data["media"] = {"bytes": data["Media"]}
|
|
|
|
if InDict(data, "media"):
|
|
|
|
#data["media"] = SureArray(data["media"])
|
|
|
|
#media = (data["media"][0]["bytes"] if "bytes" in data["media"][0] else data["media"][0]["url"])
|
|
|
|
#if len(data["media"]) > 1:
|
|
|
|
# media_list = []
|
|
|
|
# media_list.append(telegram.InputMediaPhoto(
|
|
|
|
# media[0],
|
|
|
|
# caption=(textMarkdown if textMarkdown else textPlain if textPlain else None),
|
|
|
|
# parse_mode=("MarkdownV2" if textMarkdown else None)))
|
|
|
|
# for medium in media[1:]:
|
|
|
|
# media_list.append(telegram.InputMediaPhoto(medium))
|
|
|
|
# event.message.reply_media_group(media_list, reply_to_message_id=replyToId)
|
|
|
|
#else:
|
|
|
|
# event.message.reply_photo(
|
|
|
|
# media,
|
|
|
|
# caption=(textMarkdown if textMarkdown else textPlain if textPlain else None),
|
|
|
|
# parse_mode=("MarkdownV2" if textMarkdown else None),
|
|
|
|
# reply_to_message_id=replyToId)
|
|
|
|
#event.message.reply_photo(
|
|
|
|
# (DictGet(media[0], "bytes") or DictGet(media[0], "url")),
|
|
|
|
# caption=(textMarkdown if textMarkdown else textPlain if textPlain else None),
|
|
|
|
# parse_mode=("MarkdownV2" if textMarkdown else None),
|
|
|
|
# reply_to_message_id=replyToId)
|
|
|
|
#for medium in media[1:]:
|
|
|
|
# event.message.reply_photo((DictGet(medium, "bytes") or DictGet(medium, "url")), reply_to_message_id=replyToId)
|
|
|
|
for medium in SureArray(data["media"]):
|
|
|
|
event.message.reply_photo(
|
|
|
|
(DictGet(medium, "bytes") or DictGet(medium, "url")),
|
|
|
|
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)
|
2024-06-15 02:08:09 +02:00
|
|
|
|
2024-06-16 01:40:30 +02:00
|
|
|
RegisterPlatform(name="Telegram", main=TelegramMain, sender=TelegramSender, eventClass=telegram.Update)
|
|
|
|
|