1 | # This file is part of python-cinema-club-bot
|
---|
2 | # contributed in 2024 by Mikhail Kirillov (~w96k) <w96k@runbox.com>
|
---|
3 |
|
---|
4 | # To the extent possible under law, the author(s) have dedicated all copyright
|
---|
5 | # and related and neighboring rights to this software to the public domain
|
---|
6 | # worldwide. This software is distributed without any warranty.
|
---|
7 |
|
---|
8 | # You should have received a copy of the CC0 Public Domain Dedication along
|
---|
9 | # with this software. If not, see:
|
---|
10 | # <http://creativecommons.org/publicdomain/zero/1.0/>
|
---|
11 |
|
---|
12 | from telegram import Update
|
---|
13 | from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, \
|
---|
14 | MessageHandler, filters
|
---|
15 | from dotenv import load_dotenv
|
---|
16 | import os
|
---|
17 | import logging
|
---|
18 |
|
---|
19 | from strings import INVALID_COMMAND, UNDEFINED_ERROR
|
---|
20 | from persistence import Persistence
|
---|
21 | import commands
|
---|
22 |
|
---|
23 |
|
---|
24 | load_dotenv()
|
---|
25 |
|
---|
26 | logging.basicConfig(
|
---|
27 | level=logging.INFO,
|
---|
28 | format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
---|
29 | )
|
---|
30 |
|
---|
31 |
|
---|
32 | async def unknown(update: Update, context: ContextTypes.DEFAULT_TYPE):
|
---|
33 | await context.bot.send_message(
|
---|
34 | chat_id=update.effective_chat.id,
|
---|
35 | text=INVALID_COMMAND
|
---|
36 | )
|
---|
37 |
|
---|
38 |
|
---|
39 | async def error_handler(update: object, context: ContextTypes.DEFAULT_TYPE) -> None:
|
---|
40 | logging.error("Exception:", exc_info=context.error)
|
---|
41 |
|
---|
42 | error_message = context.error.message \
|
---|
43 | if hasattr(context.error, "message") else UNDEFINED_ERROR
|
---|
44 |
|
---|
45 | await context.bot.send_message(
|
---|
46 | chat_id=update.effective_chat.id,
|
---|
47 | text=error_message
|
---|
48 | )
|
---|
49 |
|
---|
50 | if __name__ == "__main__":
|
---|
51 | app = ApplicationBuilder().token(
|
---|
52 | os.environ.get("TELEGRAM_TOKEN")
|
---|
53 | ).persistence(Persistence).build()
|
---|
54 |
|
---|
55 | # Meta commands
|
---|
56 | app.add_handler(CommandHandler("about", commands.about))
|
---|
57 |
|
---|
58 | # Event commands
|
---|
59 | app.add_handler(CommandHandler("event", commands.create_event))
|
---|
60 | app.add_handler(CommandHandler("events", commands.list_events))
|
---|
61 | app.add_handler(CommandHandler("announce", commands.create_announcement))
|
---|
62 |
|
---|
63 | # Movie commands
|
---|
64 | app.add_handler(CommandHandler("movie", commands.movie))
|
---|
65 | app.add_handler(CommandHandler("movies", commands.movies))
|
---|
66 |
|
---|
67 | # Users commands
|
---|
68 | app.add_handler(CommandHandler("set", commands.set_users))
|
---|
69 | app.add_handler(CommandHandler("add", commands.add_users))
|
---|
70 | app.add_handler(CommandHandler("list", commands.list_users))
|
---|
71 | app.add_handler(CommandHandler("users", commands.list_users))
|
---|
72 | app.add_handler(CommandHandler("queue", commands.list_users))
|
---|
73 | app.add_handler(CommandHandler("remove", commands.remove_users))
|
---|
74 | app.add_handler(CommandHandler("chooser", commands.chooser_user))
|
---|
75 | app.add_handler(CommandHandler("next", commands.who_is_next))
|
---|
76 |
|
---|
77 | app.add_handler(MessageHandler(filters.COMMAND, unknown))
|
---|
78 | app.add_error_handler(error_handler)
|
---|
79 |
|
---|
80 |
|
---|
81 | app.run_polling()
|
---|
82 |
|
---|