mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 14:50:34 +01:00
76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
|
|
import asyncio
|
|
import logging
|
|
|
|
from twitchAPI.twitch import Twitch
|
|
from twitchAPI.type import AuthScope, ChatEvent
|
|
from twitchAPI.chat import Chat, ChatEvent, ChatMessage, EventData
|
|
|
|
from database.helpers import ConfigurationHelper
|
|
from twitchbot.live_alert import checkOnlineStreamer
|
|
from webapp import webapp
|
|
|
|
USER_SCOPE = [AuthScope.CHAT_READ, AuthScope.CHAT_EDIT]
|
|
|
|
async def _onReady(ready_event: EventData):
|
|
logging.info('Bot Twitch prêt')
|
|
channel = ConfigurationHelper().getValue('twitch_channel')
|
|
webapp.config["BOT_STATUS"]["twitch_connected"] = True
|
|
webapp.config["BOT_STATUS"]["twitch_channel_name"] = channel
|
|
with webapp.app_context():
|
|
await ready_event.chat.join_room(channel)
|
|
asyncio.get_event_loop().create_task(twitchBot._checkOnlineStreamers())
|
|
|
|
|
|
async def _onMessage(msg: ChatMessage):
|
|
logging.info(f'Dans {msg.room.name}, {msg.user.name} a dit : {msg.text}')
|
|
|
|
# commande qui répond "bonjour" à "!hello"
|
|
async def _helloCommand(msg: ChatMessage):
|
|
await msg.reply(f'Bonjour {msg.user.name}')
|
|
|
|
def _isConfigured() -> bool:
|
|
helper = ConfigurationHelper()
|
|
return helper.getValue('twitch_client_id') != None and helper.getValue('twitch_client_secret') != None and helper.getValue('twitch_access_token') != None and helper.getValue('twitch_refresh_token') != None and helper.getValue('twitch_channel') != None
|
|
|
|
class TwitchBot() :
|
|
|
|
async def _connect(self):
|
|
with webapp.app_context():
|
|
if _isConfigured() :
|
|
try :
|
|
helper = ConfigurationHelper()
|
|
self.twitch = await Twitch(helper.getValue('twitch_client_id'), helper.getValue('twitch_client_secret'))
|
|
await self.twitch.set_user_authentication(helper.getValue('twitch_access_token'), USER_SCOPE, helper.getValue('twitch_refresh_token'))
|
|
self.chat = await Chat(self.twitch)
|
|
self.chat.register_event(ChatEvent.READY, _onReady)
|
|
self.chat.register_event(ChatEvent.MESSAGE, _onMessage)
|
|
# chat.register_event(ChatEvent.SUB, on_sub)
|
|
self.chat.register_command('hello', _helloCommand)
|
|
self.chat.start()
|
|
except Exception as e:
|
|
logging.error(f'Échec de l\'authentification Twitch. Vérifiez vos identifiants et redémarrez après correction : {e}')
|
|
else:
|
|
logging.info("Twitch n'est pas configuré")
|
|
|
|
async def _checkOnlineStreamers(self):
|
|
# pas bon faudrait faire un truc mieux
|
|
while True :
|
|
try:
|
|
await checkOnlineStreamer(self.twitch)
|
|
except Exception as e:
|
|
logging.error(f'Erreur lors lors du check des streamers online : {e}')
|
|
# toutes les 5 minutes
|
|
await asyncio.sleep(5*60)
|
|
|
|
def begin(self):
|
|
asyncio.run(self._connect())
|
|
|
|
# je ne sais pas encore comment appeler ça
|
|
async def _close(self):
|
|
self.chat.stop()
|
|
await self.twitch.close()
|
|
|
|
twitchBot = TwitchBot()
|
|
|