Files
MamieHenriette/twitchbot/announcements.py
T
2026-02-01 13:38:48 +01:00

52 lines
1.5 KiB
Python

import logging
from datetime import datetime, timedelta
from twitchAPI.chat import Chat
from database import db
from database.models import TwitchAnnouncement
from webapp import webapp
logger = logging.getLogger('twitch-announcements')
logger.setLevel(logging.INFO)
async def checkAndSendAnnouncements(chat: Chat, channel: str):
"""
Vérifie et envoie les annonces dont la périodicité est écoulée.
Appelé périodiquement par le bot Twitch.
"""
with webapp.app_context():
announcements: list[TwitchAnnouncement] = TwitchAnnouncement.query.filter_by(enable=True).all()
now = datetime.now()
for announcement in announcements:
if _shouldSend(announcement, now):
try:
await _sendAnnouncement(chat, channel, announcement)
announcement.last_sent = now
db.session.commit()
logger.info(f'Annonce envoyée : {announcement.name}')
except Exception as e:
logger.error(f'Erreur lors de l\'envoi de l\'annonce "{announcement.name}": {e}')
def _shouldSend(announcement: TwitchAnnouncement, now: datetime) -> bool:
"""
Vérifie si une annonce doit être envoyée basée sur sa périodicité.
"""
if announcement.last_sent is None:
return True
time_since_last = now - announcement.last_sent
periodicity_delta = timedelta(minutes=announcement.periodicity)
return time_since_last >= periodicity_delta
async def _sendAnnouncement(chat: Chat, channel: str, announcement: TwitchAnnouncement):
"""
Envoie une annonce dans le chat Twitch.
"""
await chat.send_message(channel, announcement.text)