Files
ninachloe/FaustBot/FaustBot.py
2022-03-31 15:21:47 +02:00

102 lines
4.7 KiB
Python

from FaustBot.Communication.Connection import Connection
from FaustBot.Model.Config import Config
from FaustBot.Model.ConnectionDetails import ConnectionDetails
from FaustBot.Modules import ActivityObserver, IdentNickServObserver, GiveCookieObserver, LoveAndPeaceObserver, \
FreeHugsObserver, WhoObserver, Kicker, ModulePrototype, PingAnswerObserver, SeenObserver, TitleObserver, \
UserList, WikiObserver, GiveDrinkObserver, GiveFoodObserver, ComicObserver, HelpObserver, \
IntroductionObserver, HangmanObserver, DuckObserver, AllSeenObserver, JokeObserver,TellObserver, WordRunObserver,\
GiveIceObserver, GiveDrinkToObserver, Greeter, MathRunObserver, PartyObserver, PrideObserver, SnacksObserver, \
BlockObserver
from FaustBot.Modules.CustomUserModules import GlossaryModule, ICDObserver, ModmailObserver
from FaustBot.Modules.ModuleType import ModuleType
class FaustBot(object):
def __init__(self, config_path: str):
self._config = Config(config_path)
connection_details = ConnectionDetails(self.config)
self._connection = Connection(connection_details)
@property
def config(self):
return self._config
def _setup(self):
self._connection.establish()
user_list = UserList.UserList()
self._connection.priv_msg_observable.define_user_list(user_list)
self.add_module(user_list)
self.add_module(ActivityObserver.ActivityObserver())
self.add_module(WhoObserver.WhoObserver(user_list))
self.add_module(AllSeenObserver.AllSeenObserver(user_list))
self.add_module(PingAnswerObserver.ModulePing())
self.add_module(Kicker.Kicker(user_list, self._config.idle_time))
self.add_module(SeenObserver.SeenObserver())
self.add_module(TitleObserver.TitleObserver())
self.add_module(WikiObserver.WikiObserver())
self.add_module(ModmailObserver.ModmailObserver())
self.add_module(ICDObserver.ICDObserver())
self.add_module(GlossaryModule.GlossaryModule(self._config))
self.add_module(IdentNickServObserver.IdentNickServObserver())
self.add_module(GiveDrinkObserver.GiveDrinkObserver())
self.add_module(GiveCookieObserver.GiveCookieObserver())
self.add_module(LoveAndPeaceObserver.LoveAndPeaceObserver())
self.add_module(FreeHugsObserver.FreeHugsObserver())
self.add_module(GiveFoodObserver.GiveFoodObserver())
self.add_module(ComicObserver.ComicObserver())
self.add_module(HangmanObserver.HangmanObserver())
self.add_module(HelpObserver.HelpObserver())
self.add_module(IntroductionObserver.IntroductionObserver(user_list))
self.add_module(DuckObserver.DuckObserver())
self.add_module(JokeObserver.JokeObserver())
self.add_module(TellObserver.TellObserver())
self.add_module(WordRunObserver.WordRunObserver())
self.add_module(GiveIceObserver.GiveIceObserver())
self.add_module(GiveDrinkToObserver.GiveDrinkToObserver())
self.add_module(Greeter.Greeter())
self.add_module(MathRunObserver.MathRunObserver())
self.add_module(PartyObserver.PartyObserver())
self.add_module(PrideObserver.PrideObserver())
self.add_module(SnacksObserver.SnacksObserver())
self.add_module(BlockObserver.BlockObserver())
def run(self):
self._setup()
running = True
while running:
if not self._connection.receive():
return
def add_module(self, module: ModulePrototype):
if module.__class__.__name__ in self._config.blacklist:
print(module.__class__.__name__+ " not loaded because of blacklisting")
return
for module_type in module.get_module_types():
observable = self._get_observable_by_module_type(module_type)
observable.add_observer(module)
module.config = self._config
def _get_observable_by_module_type(self, module_type: str):
if module_type == ModuleType.ON_JOIN:
return self._connection.join_observable
if module_type == ModuleType.ON_LEAVE:
return self._connection.leave_observable
if module_type == ModuleType.ON_KICK:
return self._connection.kick_observable
if module_type == ModuleType.ON_MSG:
return self._connection.priv_msg_observable
if module_type == ModuleType.ON_NICK_CHANGE:
return self._connection.nick_change_observable
if module_type == ModuleType.ON_PING:
return self._connection.ping_observable
if module_type == ModuleType.ON_NOTICE:
return self._connection.notice_observable
if module_type == ModuleType.ON_MAGIC_NUMBER:
return self._connection.magic_number_observable