-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsastrabot.py
More file actions
95 lines (79 loc) · 3.45 KB
/
sastrabot.py
File metadata and controls
95 lines (79 loc) · 3.45 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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.dispatcher import FSMContext
from config import BOT_TOKEN, logfile, ROOT_ID
from help import get_help
from parse_vedabase import get_full_verse
from statiscics import Statisctic
from memory import memory
statistic = Statisctic()
mainlogger = logging.getLogger(__name__)
mainlogger.setLevel(logging.INFO)
handler = logging.FileHandler(logfile)
handler.setFormatter(logging.Formatter(fmt='%(asctime)s %(levelname)-2s %(message)s'))
mainlogger.addHandler(handler)
aiogramlogger = logging.getLogger("aiogram")
aiogramlogger.addHandler(handler)
bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start', 'help'])
async def send_welcome(message: types.Message):
"""
Обрабатывает команды `/start` и `/help`
"""
# user_info = [
# str(message.from_user.id),
# message.from_user.first_name,
# dict(message.from_user).get(
# 'last_name', 'None'),
# dict(message.from_user).get('username', 'None')
# ]
# TODO russian and english help
lang = message.from_user.locale.language
await message.reply(get_help(lang))
@dp.message_handler(lambda message: message.text.lower().startswith("verse "))
async def search_verse(message: types.Message):
message_text = message.text.lower()
if len(message_text.split()) < 4 or len(message_text.split()) > 5:
return await message.reply('Wrong query string. Try /help command')
query_string = message_text.split('verse ')[1]
verse = get_full_verse(query_string)
if 'errors' in verse:
# TODO errors to statistic
logging.warning(
f"{message_text.split('verse ')[1]} - {' | '.join(verse['errors'])}")
await message.reply('\n'.join(verse['errors']))
else:
statistic.write_entry(
f'{message.from_user.id}:{message.from_user.username}:\
{message.from_user.first_name}:{message.from_user.last_name}',
verse['purport_id'])
if not verse['is_purport']:
watch_purport = '\nNo purport!'
else:
watch_purport = f"\n===============\nClick to read purport /purport_{verse['purport_id']}"
await message.reply('\n\n'.join(list(verse.values())[:-2]) + watch_purport)
@dp.message_handler(commands=['stat'])
async def get_statistics(message: types.Message):
if message.from_user.id == ROOT_ID:
await bot.send_document(
message.from_user.id,
open('files/stat.log',
'rb'))
@dp.message_handler(lambda message: message.text.startswith("/message "))
async def sendind_to_users(message: types.Message):
if message.from_user.id == ROOT_ID:
for user in []:
await bot.send_message(user, message.text.replace('/message ', ''))
@dp.message_handler(lambda message: message.text.startswith("/purport_"))
async def sendind_purport(message: types.Message):
purport_id = message.text.replace('/purport_', '')
try:
await message.reply(memory.get(purport_id))
except KeyError:
await message.reply(f'The link is out of date. You need to re-enter the verse number to getting text and comment.\nEx. verse en sb 1.10.8')
@dp.message_handler()
async def echo(message: types.Message):
await message.answer("Do not understand this message. Try /help command", reply_markup=None)
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)