-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbot.py
More file actions
78 lines (60 loc) · 2.84 KB
/
bot.py
File metadata and controls
78 lines (60 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import logging
from telegram.ext import ApplicationBuilder
from commands import CommandsFactory
from dbscripts import BotDatabase
from pageupd import GithubPageUpdater
try:
from config import config
except ImportError:
from test_config import test_config
config = test_config
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
class Bot:
def __init__(self, token: str) -> None:
"""
Инициализация бота.
Этот метод создает экземпляр бота и привязывает команды к приложению.
Параметры:
token (str): Токен для аутентификации бота в API.
Возвращает:
None: Этот метод ничего не возвращает.
"""
self.application = ApplicationBuilder().token(token).build()
self.commands = CommandsFactory.create_commands(self.application)
def run(self) -> None:
"""
Запускает бота и начинает слушать сообщения от пользователей.
Этот метод инициирует процесс опроса, который позволяет боту получать и обрабатывать входящие сообщения.
Возвращает:
None: Этот метод ничего не возвращает.
"""
return self.application.run_polling()
def main() -> None:
"""
Главная функция приложения.
Эта функция инициализирует базу данных, настраивает и запускает обновление страницы на GitHub,
а также инициализирует и запускает бота Telegram. Она удерживает главный поток живым,
чтобы позволить планировщику работать, пока бот активен.
Возвращает:
None: Эта функция ничего не возвращает.
"""
# Инициализация базы данных
database = BotDatabase(config['db']['database_path'])
database.create_tables()
# Инициализация и запуск UpdateGithubPage
updater = GithubPageUpdater(**config['pageupd'])
scheduler = updater.run_on_schedule(**config['update_time'])
try:
# Запуск бота
bot = Bot(config['bot']['telegram_token'])
bot.run()
# Держим главный поток живым, чтобы позволить планировщику работать
while True:
pass
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
if __name__ == '__main__':
main()