Queer European MD passionate about IT

bot.py 3.3 KB

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