[EDIT] Извините, что заголовок отключен.Я думал о другой проблеме, с которой столкнулся, и случайно пересек их.
Привет всем, я сейчас пишу свой скелет IRC-бота на Python.
Чтобы объяснить пару вещей передЯ задаю свой вопрос, я пишу IRC-бота в комплекте с подключаемой системой, которая будет принимать сигналы (т. Е. Когда получено сообщение, кто-то видел присоединение к каналу, ...) и вызывать эти функции, содержащиесяплагин, я буду использовать вспомогательный метод, т. е. если мы увидели сообщение, вызовите sawMessage
.sawMessage
определит, какие подключаемые модули хотят обрабатывать сообщения, используя класс PluginManager
и т. Д. Я продумал всю систему.
У меня также есть функция для каждого действия IRC, то есть "doJoin""," doPart "и т. д., чтобы плагины могли вызывать их без того, чтобы я напрямую выставлял подключение к сокету.- Должны ли эти функции автоматически вызывать соответствующие sawMessage
, sawJoin
и т. Д.?Или это должен быть плагин для вызова sawMessage
после вызова doMessage
?Причина, по которой я спрашиваю, состоит в том, что если doMessage
вызывает sawMessage
, а sawMessage
обрабатывает что-то, что вызывает doMessage
, это может привести к многократному повторению, прежде чем разматывать стек.
Недостатки созданияплагин, отвечающий за вызов sawMessage
для уведомления других плагинов, состоит в том, что плагин может выбрать НЕ уведомлять другие плагины, а также, что если плагин ДОЛЖЕН вызывать sawMessage
функция, проблема рекурсии может всплыть обратно.
Я не уверен, как решить эту проблему.Хорошей практикой является заставить doMessage
автоматически вызывать sawMessage
для уведомления других плагинов, но всегда существует вероятность переполнения стека из-за рекурсии, если плагин не спроектирован должным образом (т.е. не отвечает наэто собственные сообщения), но если плагин должен в любом случае вызвать sawMessage
, та же проблема возникает.
Есть какие-либо мысли / мнения по этому поводу?Я знаю, что это не простой вопрос / ответ, но я не могу решить, что с этим делать.Обычно, если бы я просто писал маленького бота для собственного использования, я бы не заботился о возможной проблеме рекурсии.Тем не менее, я пишу это с целью распространения (я хочу, чтобы это был следующий БОЛЬШОЙ бот, как и любой другой разработчик IRC-ботов: D), и я хочу, чтобы все было сделано правильно.
Спасибо!