sastrabot.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import logging
  2. from aiogram import Bot, Dispatcher, executor, types
  3. from aiogram.dispatcher import FSMContext
  4. from config import BOT_TOKEN, logfile, ROOT_ID
  5. from help import get_help
  6. from parse_vedabase import get_full_verse
  7. from statiscics import Statisctic
  8. from memory import memory
  9. statistic = Statisctic()
  10. mainlogger = logging.getLogger(__name__)
  11. mainlogger.setLevel(logging.INFO)
  12. handler = logging.FileHandler(logfile)
  13. handler.setFormatter(logging.Formatter(fmt='%(asctime)s %(levelname)-2s %(message)s'))
  14. mainlogger.addHandler(handler)
  15. aiogramlogger = logging.getLogger("aiogram")
  16. aiogramlogger.addHandler(handler)
  17. bot = Bot(token=BOT_TOKEN)
  18. dp = Dispatcher(bot)
  19. @dp.message_handler(commands=['start', 'help'])
  20. async def send_welcome(message: types.Message):
  21. """
  22. Обрабатывает команды `/start` и `/help`
  23. """
  24. # user_info = [
  25. # str(message.from_user.id),
  26. # message.from_user.first_name,
  27. # dict(message.from_user).get(
  28. # 'last_name', 'None'),
  29. # dict(message.from_user).get('username', 'None')
  30. # ]
  31. # TODO russian and english help
  32. lang = message.from_user.locale.language
  33. await message.reply(get_help(lang))
  34. @dp.message_handler(lambda message: message.text.lower().startswith("verse "))
  35. async def search_verse(message: types.Message):
  36. message_text = message.text.lower()
  37. if len(message_text.split()) < 4 or len(message_text.split()) > 5:
  38. return await message.reply('Wrong query string. Try /help command')
  39. query_string = message_text.split('verse ')[1]
  40. verse = get_full_verse(query_string)
  41. if 'errors' in verse:
  42. # TODO errors to statistic
  43. logging.warning(
  44. f"{message_text.split('verse ')[1]} - {' | '.join(verse['errors'])}")
  45. await message.reply('\n'.join(verse['errors']))
  46. else:
  47. statistic.write_entry(
  48. f'{message.from_user.id}:{message.from_user.username}:\
  49. {message.from_user.first_name}:{message.from_user.last_name}',
  50. verse['purport_id'])
  51. if not verse['is_purport']:
  52. watch_purport = '\nNo purport!'
  53. else:
  54. watch_purport = f"\n===============\nClick to read purport /purport_{verse['purport_id']}"
  55. await message.reply('\n\n'.join(list(verse.values())[:-2]) + watch_purport)
  56. @dp.message_handler(commands=['stat'])
  57. async def get_statistics(message: types.Message):
  58. if message.from_user.id == ROOT_ID:
  59. await bot.send_document(
  60. message.from_user.id,
  61. open('files/stat.log',
  62. 'rb'))
  63. @dp.message_handler(lambda message: message.text.startswith("/message "))
  64. async def sendind_to_users(message: types.Message):
  65. if message.from_user.id == ROOT_ID:
  66. for user in []:
  67. await bot.send_message(user, message.text.replace('/message ', ''))
  68. @dp.message_handler(lambda message: message.text.startswith("/purport_"))
  69. async def sendind_purport(message: types.Message):
  70. purport_id = message.text.replace('/purport_', '')
  71. try:
  72. await message.reply(memory.get(purport_id))
  73. except KeyError:
  74. 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')
  75. @dp.message_handler()
  76. async def echo(message: types.Message):
  77. await message.answer("Do not understand this message. Try /help command", reply_markup=None)
  78. if __name__ == '__main__':
  79. executor.start_polling(dp, skip_updates=True)