Разделите логику на разные модули с общим глобальным объектом.Python

Программы на Python
Ответить
Anonymous
 Разделите логику на разные модули с общим глобальным объектом.

Сообщение Anonymous »

Я работаю над ботом Telegram с помощью Telethon.
У меня есть несколько обработчиков для нескольких команд. Например:

Код: Выделить всё

bot.py:
bot = TelegramClient('bot', TELEGRAM_API_ID, TELEGRAM_API_HASH).start(bot_token=TELEGRAM_BOT_TOKEN)

@bot.on(events.NewMessage(pattern='/start'))
def start_handler(event):
...

@bot.on(events.NewMessage(pattern='/time'))
def time_handler(event):
...

@bot.on(events.NewMessage(pattern='/timezone'))
def timezone_handler(event):
...

def run():
bot.run_until_disconnected()
И я запускаю его (вызов run()) из другого модуля:

Код: Выделить всё

start.py

Код: Выделить всё

from bot import run
run()
По мере роста количества команд модуль bot.py становится все более громоздким. Как лучше разделить обработчики на разные модули, чтобы объект бота был одинаковым для всех?
Мои первоначальные идеи:
  • Наличие методов инициализации для разных групп обработчиков:

Код: Выделить всё

def init_time_handlers(bot):
@bot.on(events.NewMessage(pattern='/time'))
def time_handler(event):
...

@bot.on(events.NewMessage(pattern='/timezone'))
def timezone_handler(event):
...

Код: Выделить всё

run.py:
from bot import bot
from time import init_time_handlers
# import other handlers modules

init_time_handlers(bot)
# init other handlers

bot.run_until_disconnected()
  • Наличие одного файла сопоставления и обработчиков в отдельных модулях:

Код: Выделить всё

def time_handler(event):
...

def timezone_handler(event):
...

Код: Выделить всё

from time import time_handler, timezone_handler
# import other handlers modules

bot = TelegramClient('bot', TELEGRAM_API_ID, TELEGRAM_API_HASH).start(bot_token=TELEGRAM_BOT_TOKEN)

@bot.on(events.NewMessage(pattern='/start'))
def start_handler(event):
...

bot.on(events.NewMessage(pattern='/time'))(time_handler)
bot.on(events.NewMessage(pattern='/timezone'))(timezone_handler)
# map other handlers
Есть ли лучший способ справиться с этим?

Подробнее здесь: https://stackoverflow.com/questions/693 ... bal-object
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»