Python teamspeak3 api

#python #global-variables #api-design

#python #глобальные переменные #api-дизайн

Вопрос:

Я создаю бота для TS3 с помощью API из github.

В main.py Я создаю экземпляр соединения с именем ts3conn , использующим класс TS3Connection. Затем я регистрирую событие, подобное этому: `ts3conn.register_for_channel_events(channel_id, event_handler)

В модуле.py я создаю event_handler подобное:

 event_handler(sender, **kw):
    event = kw["event"] # variable 'event' contains target_channel_id (to which client moved) and client_id 
    # Here I need to use the ts3conn instance from main, don't know how.
 

Итак, я попытался сделать from main import ts3conn это в модуле.py, но он останавливается. Я пытался понять TS3Connection.py и Events.py (самые важные файлы) но автор использует модуль «blinker», и я понятия не имею, как я могу редактировать эти файлы.

Если вы можете мне помочь, я могу с радостью принять примитивные методы решения проблемы, но также я хочу остаться с текущей структурой main, содержащей каталог connection и modules, содержащий функции, которые используют соединение для связи с сервером TS3.

Ответ №1:

Оберните функцию handling_event классом, который будет передавать ts3conn обработчику при вызове.

 class event_handler(object):
    def __init__(self, ts3conn):
        self.ts3conn = ts3conn

    def handle_event(self, sender, **kw):
        print(self.ts3conn)
        # some operations on ts3conn

# in main
handler = event_handler(ts3conn)
ts3conn.register_for_channel_events(1, handler.handle_event)