Queer European MD passionate about IT

bot.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. """Provide bike sharing information via Telegram bot."""
  2. # Standard library modules
  3. import logging
  4. import os
  5. import sys
  6. # Third party modules
  7. import davtelepot
  8. from davtelepot import administration_tools, authorization, languages
  9. # Project modules
  10. from . import ciclopi
  11. from . import helper
  12. from .data.passwords import bot_token
  13. from .messages import (
  14. language_messages, supported_languages
  15. )
  16. if __name__ == '__main__':
  17. path = os.path.dirname(__file__)
  18. try:
  19. from .data.config import log_file_name
  20. except ImportError:
  21. log_file_name = 'CicloPi.info.log'
  22. try:
  23. from .data.config import errors_file_name
  24. except ImportError:
  25. errors_file_name = 'CicloPi.errors.log'
  26. try:
  27. from .data.config import local_host, port
  28. except ImportError:
  29. local_host, port = '127.0.0.1', 3000
  30. try:
  31. from .data.config import hostname, certificate
  32. except ImportError:
  33. hostname, certificate = '', None
  34. log_file = f"{path}/data/{log_file_name}"
  35. errors_file = f"{path}/data/{errors_file_name}"
  36. # Outputs the log in console, log_file and errors_file
  37. # Log formatter: datetime, module name (filled with spaces up to 15
  38. # characters), logging level name (filled to 8), message
  39. log_formatter = logging.Formatter(
  40. "%(asctime)s [%(module)-15s %(levelname)-8s] %(message)s",
  41. style='%'
  42. )
  43. root_logger = logging.getLogger()
  44. root_logger.setLevel(logging.DEBUG)
  45. file_handler = logging.FileHandler(log_file, mode="a", encoding="utf-8")
  46. file_handler.setFormatter(log_formatter)
  47. file_handler.setLevel(logging.DEBUG)
  48. root_logger.addHandler(file_handler)
  49. file_handler = logging.FileHandler(errors_file, mode="a", encoding="utf-8")
  50. file_handler.setFormatter(log_formatter)
  51. file_handler.setLevel(logging.ERROR)
  52. root_logger.addHandler(file_handler)
  53. consoleHandler = logging.StreamHandler()
  54. consoleHandler.setFormatter(log_formatter)
  55. consoleHandler.setLevel(logging.DEBUG)
  56. root_logger.addHandler(consoleHandler)
  57. # Instantiate bot
  58. bot = davtelepot.bot.Bot(token=bot_token,
  59. database_url=f'{path}/data/ciclopi.db',
  60. hostname=hostname, certificate=certificate)
  61. bot.set_path(path)
  62. bot.set_class_log_file_name(log_file_name)
  63. bot.set_class_errors_file_name(errors_file_name)
  64. bot.set_unknown_command_message(
  65. "Comando sconosciuto!\n"
  66. "Scrivi /help per visualizzare la guida."
  67. )
  68. bot.set_authorization_denied_message(
  69. "Non disponi di autorizzazioni sufficienti per questo comando."
  70. )
  71. with bot.db as db:
  72. db['users'].upsert(
  73. dict(
  74. telegram_id=63538990,
  75. privileges=1
  76. ),
  77. ['telegram_id']
  78. )
  79. administration_tools.init(bot)
  80. ciclopi.init(bot)
  81. helper.init(
  82. bot=bot,
  83. )
  84. authorization.init(bot)
  85. languages.init(
  86. bot, language_messages=language_messages,
  87. supported_languages=supported_languages
  88. )
  89. # Run bot(s)
  90. logging.info("Press ctrl+C to exit.")
  91. exit_state = davtelepot.bot.Bot.run(
  92. local_host=local_host,
  93. port=port
  94. )
  95. sys.exit(exit_state)