Queer European MD passionate about IT

bot.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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 authorization, languages
  9. # Project modules
  10. from . import bot_tools
  11. from . import ciclopi
  12. from . import helper
  13. from .data.passwords import bot_token
  14. language_messages = {
  15. 'language_command': {
  16. 'name': {
  17. 'en': "/language",
  18. 'it': "/lingua"
  19. },
  20. 'alias': {
  21. 'en': "Language 🗣",
  22. 'it': "Lingua 🗣"
  23. },
  24. 'description': {
  25. 'en': "Change language settings",
  26. 'it': "Cambia le impostazioni della lingua"
  27. }
  28. },
  29. 'language_button': {
  30. 'description': {
  31. 'en': "Change language settings",
  32. 'it': "Cambia le impostazioni della lingua"
  33. }
  34. },
  35. 'language_panel': {
  36. 'text': {
  37. 'en': "<b>Choose a language</b>",
  38. 'it': "<b>Seleziona una lingua</b>"
  39. }
  40. }
  41. }
  42. supported_languages = {
  43. 'en': {
  44. 'flag': '🇬🇧',
  45. 'name': 'English'
  46. },
  47. 'it': {
  48. 'flag': '🇮🇹',
  49. 'name': 'Italiano'
  50. }
  51. }
  52. if __name__ == '__main__':
  53. path = os.path.dirname(__file__)
  54. try:
  55. from .data.config import log_file_name
  56. except ImportError:
  57. log_file_name = 'CicloPi.info.log'
  58. try:
  59. from .data.config import errors_file_name
  60. except ImportError:
  61. errors_file_name = 'CicloPi.errors.log'
  62. try:
  63. from .data.config import local_host, port
  64. except ImportError:
  65. local_host, port = '127.0.0.1', 3000
  66. log_file = f"{path}/data/{log_file_name}"
  67. errors_file = f"{path}/data/{errors_file_name}"
  68. # Outputs the log in console, log_file and errors_file
  69. # Log formatter: datetime, module name (filled with spaces up to 15
  70. # characters), logging level name (filled to 8), message
  71. log_formatter = logging.Formatter(
  72. "%(asctime)s [%(module)-15s %(levelname)-8s] %(message)s",
  73. style='%'
  74. )
  75. root_logger = logging.getLogger()
  76. root_logger.setLevel(logging.DEBUG)
  77. file_handler = logging.FileHandler(log_file, mode="a", encoding="utf-8")
  78. file_handler.setFormatter(log_formatter)
  79. file_handler.setLevel(logging.DEBUG)
  80. root_logger.addHandler(file_handler)
  81. file_handler = logging.FileHandler(errors_file, mode="a", encoding="utf-8")
  82. file_handler.setFormatter(log_formatter)
  83. file_handler.setLevel(logging.ERROR)
  84. root_logger.addHandler(file_handler)
  85. consoleHandler = logging.StreamHandler()
  86. consoleHandler.setFormatter(log_formatter)
  87. consoleHandler.setLevel(logging.DEBUG)
  88. root_logger.addHandler(consoleHandler)
  89. # Instantiate bot
  90. bot = davtelepot.bot.Bot(token=bot_token,
  91. database_url='ciclopibot/data/ciclopi.db')
  92. # Assign commands to bot
  93. bot.set_unknown_command_message(
  94. "Comando sconosciuto!\n"
  95. "Scrivi /help per visualizzare la guida."
  96. )
  97. bot.set_authorization_denied_message(
  98. "Non disponi di autorizzazioni sufficienti per questo comando."
  99. )
  100. with bot.db as db:
  101. db['users'].upsert(
  102. dict(
  103. telegram_id=63538990,
  104. privileges=1
  105. ),
  106. ['telegram_id']
  107. )
  108. bot_tools.init(bot)
  109. ciclopi.init(bot)
  110. helper.init(
  111. bot=bot,
  112. help_message="<b>📖 Guida di {bot.name}\n\n</b>"
  113. "Benvenuto!\n"
  114. "Per conoscere i comandi disponibili visita l'apposita "
  115. "sezione della guida premendo il pulsante Comandi.\n\n"
  116. "Autore e amministratore del bot: @davte",
  117. help_sections_file='ciclopibot/data/help.json'
  118. )
  119. authorization.init(bot, language='it')
  120. languages.init(
  121. bot, language='it', language_messages=language_messages,
  122. supported_languages=supported_languages
  123. )
  124. # Run bot(s)
  125. logging.info("Presso ctrl+C to exit.")
  126. exit_state = davtelepot.bot.Bot.run(
  127. local_host=local_host,
  128. port=port
  129. )
  130. sys.exit(exit_state)