Я пытаюсь реализовать декоратор для моего плагина на основе IR C бот.
Добавление команды ("! Command arg1 arg2") на основе имени функции должно выглядеть следующим образом:
class CorePlugin:
@BotCommand
def mycommand(self, arguments):
self.bot.privmsg("#mychannel", "invoked !mycommand %s" % " ".join(arguments))
Декоратор выглядит так:
class BotCommand:
def __init__(self, func):
events.add(func.__name__, func)
Добавление команды работает нормально. Это мой Events
класс:
class Events:
def __init__(self):
self.events = {}
def add(self, cmd, func):
self.events[cmd] = func
def call(self, cmd, args):
for c, f in self.events.items():
if c == cmd:
f(None, args)
Events.call
успешно вызывается в моем Bot
классе после того, как вошел PRIVMSG, но мне нужно передать фактический объект (из CorePlugin
) к моей украшенной функции вручную. В настоящее время это просто None
. func.__self__
как-то теряется в процессе.
У вас есть идея, как к этому подойти?