bitbot-3.11-fork/modules/telegram.py

63 lines
2.1 KiB
Python
Raw Normal View History

#--ignore
import telegram, telegram.ext
from src import utils
2017-09-05 19:50:20 +00:00
import json
from datetime import datetime
from threading import Thread
class Module(Thread):
_name = "telegram"
def on_load(self):
key = self.bot.config.get("telegram-api-key")
if not key: return
self.updater = telegram.ext.Updater(key)
2017-09-05 19:50:20 +00:00
self.dispatcher = self.updater.dispatcher
start_handler = telegram.ext.CommandHandler("start", self.start)
command_handler = telegram.ext.MessageHandler(
telegram.ext.Filters.command, self.handle)
2017-09-05 19:50:20 +00:00
self.dispatcher.add_handler(start_handler)
self.dispatcher.add_handler(command_handler)
self.updater.start_polling()
def start(self, bot, update):
bot.send_message(chat_id=update.message.chat_id, text="`Dolphin, but Telegram`", parse_mode="Markdown")
def handle(self, bot, update):
message, text = update.message, update.message.text
text = text.replace("\r", '').replace("\n", " ")
command = text.split(" ")[0][1:]
command = command.split("@")[0]
args = text.split(" ", 1)[1:][0] if " " in text else ""
data = {
"chat_id": message.chat_id,
"message_id": message.message_id,
"line": text,
"command": command,
"args": args,
"args_split": text.split(" ")[1:],
"stdout": IOWrapper(bot, message.chat_id, message.message_id),
"stderr": IOWrapper(bot, message.chat_id, message.message_id),
"external": True,
}
self.events.on("telegram.command").on(command).call(**data)
2017-09-05 19:50:20 +00:00
@utils.hook("signal.interrupt")
2017-09-05 19:50:20 +00:00
def sigint(self, event):
self.updater.stop()
class IOWrapper:
def __init__(self, bot, chat_id, message_id):
self.bot = bot
self.chat_id = chat_id
self.message_id = message_id
def write(self, text):
if len(text)>4096-10:
text = text[:4086] + ""
self.bot.send_message(chat_id=self.chat_id, text="```\n" + text + "\n```",
reply_to_message_id=self.message_id, parse_mode="Markdown")