from ChatBot import ChatBot from obspython import * from services.CommandService import CommandService from services.DiceService import DiceService from services.SpotifyService import SpotifyService from services.TimedMessageService import TimedMessageService from threading import Thread DESCRIPTION = "A Twitch chat bot that interacts with OBS and other services.\n\nby kholo" chatbot = ChatBot() services = { "command": CommandService(), "dice": DiceService(), "spotify": SpotifyService(), "tmsg": TimedMessageService() } def set_services(): chatbot.clear_services() for name, service in services.items(): if service.enabled: print(f"- Enabling service {name}") chatbot.add_service(service) # Callbacks ----- def start(props, prop): print("[ STARTING THE BOT ]") set_services() thread = Thread(target=chatbot.start) thread.daemon = True thread.start() print("Bot started") def stop(props, prop): print("[ STOPPING THE BOT ]") chatbot.stop() print("Bot stopped") # Helpers ----- def create_messages_properties(): props = obs_properties_create() obs_properties_add_text(props, "msg_help", "Help message", OBS_TEXT_DEFAULT) obs_properties_add_text(props, "msg_unknown_cmd", "Unknown command message", OBS_TEXT_DEFAULT) obs_properties_add_text(props, "msg_hi", "Welcome message", OBS_TEXT_DEFAULT) obs_properties_add_text(props, "msg_bye", "Farewell message", OBS_TEXT_DEFAULT) return props def create_twitch_irc_properties(): props = obs_properties_create() obs_properties_add_text(props, "irc_nickname", "Nickname", OBS_TEXT_DEFAULT) obs_properties_add_text(props, "irc_password", "OAuth password", OBS_TEXT_PASSWORD) obs_properties_add_text(props, "irc_channel", "Channel", OBS_TEXT_DEFAULT) return props # OBS functions ----- def script_description(): return DESCRIPTION def script_load(settings): for service in services.values(): service.load(settings) def script_properties(): props = obs_properties_create() obs_properties_add_button(props, "start", "Start bot", start) obs_properties_add_button(props, "stop", "Stop bot", stop) obs_properties_add_group(props, "messages", "Default messages", OBS_GROUP_NORMAL, create_messages_properties()) obs_properties_add_group(props, "irc", "Twitch IRC", OBS_GROUP_NORMAL, create_twitch_irc_properties()) for name, service in services.items(): obs_properties_add_group(props, name, service.title, OBS_GROUP_CHECKABLE, service.create_properties()) return props def script_update(settings): chatbot.set_help_message(obs_data_get_string(settings, "msg_help")) chatbot.set_unknown_command_message(obs_data_get_string(settings, "msg_unknown_cmd")) chatbot.set_welcome_message(obs_data_get_string(settings, "msg_hi")) chatbot.set_farewell_message(obs_data_get_string(settings, "msg_bye")) chatbot.set_twitch_irc_settings( obs_data_get_string(settings, "irc_nickname"), obs_data_get_string(settings, "irc_password"), obs_data_get_string(settings, "irc_channel") ) for name, service in services.items(): if obs_data_get_bool(settings, name): service.enabled = True service.update(settings) else: service.enabled = False def script_save(settings): for service in services.values(): service.save(settings)