Dzień dobry. Piszę sobie irc-bota z systemem pluginów. Celem jest jak największe uproszczenie dodawania owych pluginów. Jak na razie udało mi się osiągnąć to, że wystarczy do katalogu /plugins
dorzucić plik z klasą dziedziczącą po plugin
. Przy starcie programu wczytywane są wszystkie takie pluginy i kiedy na ircu przyjdzie jakaś wiadomość, na każdym z nich jest wywoływana metoda on_pubmsg
. Tutaj kod: https://github.com/pingwindyktator/pybot
Chciałbym jednak bardziej ułatwić wywoływanie prostych komend, tj kiedy ktoś napisze na ircu:
> nick_bota: komenda argumenty do komendy
to zostanie wywołana funkcja komenda(argumenty do komendy)
z pluginu który taką funkcję rejestruje. Chcę to zrealizować za pomocą dekoratorów, tj:
@memoize('komenda')
def some_func()
Problem jest jednak taki, że owe funkcje będą metodami w klasie. Finalnie ma to wyglądać zatem tak: http://melpon.org/wandbox/permlink/Spx6TxwDNojeNOoA
To co udało mi się zrobić: http://melpon.org/wandbox/permlink/XISE5u938NdiOMhE
jednak tutaj muszę najpierw wywołać funkcję (linia 40) żeby wowołał się dekorator i zapisał sobie instancję klasy tej funkcji (self
, linia 9)
Jakieś pomysł?