mvoau-klant/bot.py
2021-04-10 14:57:37 +02:00

101 lines
3.4 KiB
Python
Executable file

#!/usr/bin/python3
import asyncio
import os
import time
import logging
from . import config, taalgebruik, wekober
# Telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters,\
CallbackQueryHandler, CallbackContext
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, ChatAction, ParseMode
STICKER_AL_AAN = None
API_KEY = os.environ["TG_APIKEY"];
###############################################################################
# TELEGRAM HANDLERS #
###############################################################################
def start(update, context):
context.bot.send_message(chat_id=update.message.chat_id, text="Laden versie v2.1…")
time.sleep(5)
context.bot.send_message(chat_id=update.message.chat_id, text="Versie v2.1 geladen!")
context.bot.send_message(chat_id=update.message.chat_id, text="Ik ben terug van weggeweest en ik ben klaar om te rollen!\n\
\nJullie hebben misschien een lange tijd vrijspel gehad, maar nu sla ik terug!")
def sokpop(update, context):
if update.message.from_user.id not in config.SOKPOP_GEBRUIKERS:
update.message.reply_text("U heeft onvoldoende rechten.")
elif len(context.args) < 2:
update.message.reply_text("Gebruik als volgt: /sokpop <gespreksid> <tekst>")
else:
try:
chat_id = int(context.args[0])
text = " ".join(context.args[1:])
context.bot.send_message(chat_id=chat_id, text=text)
except ValueError:
update.message.reply_text("Het eerste argument <gespreksid> moet een\
geheel getal zijn!")
async def bot_main(queue: asyncio.Queue):
global STICKER_AL_AAN
logging.info("Connecting to Telegram")
updater = Updater(token=API_KEY, use_context=True)
dispatcher = updater.dispatcher
start_handler = CommandHandler("start", start)
# Handlers from taalgebruik
dump_dataset_handler = CommandHandler("dump", taalgebruik.dump_dataset)
rapporteer_handler = CommandHandler("rapporteer", taalgebruik.rapporteer)
message_handler = MessageHandler(Filters.text, taalgebruik.handle_message)
callback_handler = CallbackQueryHandler(taalgebruik.handle_correction)
# Handlers for wekober
wekober_handler = CommandHandler("wekober", wekober.handle_wekober)
dispatcher.add_handler(start_handler)
dispatcher.add_handler(dump_dataset_handler)
dispatcher.add_handler(rapporteer_handler)
dispatcher.add_handler(callback_handler)
dispatcher.add_handler(wekober_handler)
dispatcher.add_handler(CommandHandler("sokpop", sokpop))
dispatcher.add_handler(message_handler)
STICKER_AL_AAN = updater.bot.get_sticker_set("mijnvervaardigingsoberrobot")\
.stickers[0]
updater.start_polling()
logging.info("Started bot")
#updater.idle()
try:
while True:
event = await queue.get()
if event["type"] == "pc_status_changed":
await wekober.on_pc_status_changed(updater.bot, event["status"])
queue.task_done()
except asyncio.CancelledError:
pass
finally:
logging.info("Stopping bot")
updater.stop()
# Main
async def main():
# Set up logging
queue = asyncio.Queue()
logging.basicConfig(format='[%(asctime)s %(levelname)s] %(name)s: %(message)s', level=logging.INFO)
# Initalize taalgebruik
taalgebruik.init()
t_dbus_main = asyncio.create_task(wekober.start_dbus(queue))
t_http_main = asyncio.create_task(wekober.start_http(queue))
t_bot_main = asyncio.create_task(bot_main(queue))
await asyncio.gather(t_dbus_main, t_bot_main, t_http_main)
if __name__ == "__main__":
asyncio.run(main())