101 lines
3.4 KiB
Python
Executable file
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())
|