mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 14:50:34 +01:00
Alerte de live
This commit is contained in:
@@ -21,7 +21,8 @@ class GameBundle(db.Model):
|
|||||||
|
|
||||||
class LiveAlert(db.Model):
|
class LiveAlert(db.Model):
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
enable = db.Column(db.Boolean, default=False)
|
enable = db.Column(db.Boolean, default=True)
|
||||||
|
online = db.Column(db.Boolean, default=False)
|
||||||
login = db.Column(db.String(128))
|
login = db.Column(db.String(128))
|
||||||
notify_channel = db.Column(db.Integer)
|
notify_channel = db.Column(db.Integer)
|
||||||
message = db.Column(db.String(2000))
|
message = db.Column(db.String(2000))
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ CREATE TABLE IF NOT EXISTS `humeur` (
|
|||||||
CREATE TABLE IF NOT EXISTS live_alert (
|
CREATE TABLE IF NOT EXISTS live_alert (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
`enable` BOOLEAN NOT NULL DEFAULT TRUE,
|
`enable` BOOLEAN NOT NULL DEFAULT TRUE,
|
||||||
|
`online` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||||
`login` VARCHAR(128) UNIQUE NOT NULL,
|
`login` VARCHAR(128) UNIQUE NOT NULL,
|
||||||
`notify_channel` INTEGER NOT NULL,
|
`notify_channel` INTEGER NOT NULL,
|
||||||
`message` VARCHAR(2000) NOT NULL
|
`message` VARCHAR(2000) NOT NULL
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from twitchAPI.type import AuthScope, ChatEvent
|
|||||||
from twitchAPI.chat import Chat, ChatEvent, ChatMessage, EventData
|
from twitchAPI.chat import Chat, ChatEvent, ChatMessage, EventData
|
||||||
|
|
||||||
from database.helpers import ConfigurationHelper
|
from database.helpers import ConfigurationHelper
|
||||||
|
from twitchbot.live_alert import checkOnlineStreamer
|
||||||
from webapp import webapp
|
from webapp import webapp
|
||||||
|
|
||||||
USER_SCOPE = [AuthScope.CHAT_READ, AuthScope.CHAT_EDIT]
|
USER_SCOPE = [AuthScope.CHAT_READ, AuthScope.CHAT_EDIT]
|
||||||
@@ -53,14 +53,13 @@ class TwitchBot() :
|
|||||||
async def _checkOnlineStreamers(self):
|
async def _checkOnlineStreamers(self):
|
||||||
# pas bon faudrait faire un truc mieux
|
# pas bon faudrait faire un truc mieux
|
||||||
while True :
|
while True :
|
||||||
async for stream in self.twitch.get_streams(user_login=['chainesteve']):
|
try:
|
||||||
print(stream.user_id)
|
await checkOnlineStreamer(self.twitch)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f'Erreur lors lors du check des streamers online : {e}')
|
||||||
# toutes les 5 minutes
|
# toutes les 5 minutes
|
||||||
await asyncio.sleep(5*60)
|
await asyncio.sleep(5*60)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def begin(self):
|
def begin(self):
|
||||||
asyncio.run(self._connect())
|
asyncio.run(self._connect())
|
||||||
|
|
||||||
|
|||||||
36
twitchbot/live_alert.py
Normal file
36
twitchbot/live_alert.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
from twitchAPI.twitch import Twitch
|
||||||
|
from twitchAPI.object.api import Stream
|
||||||
|
|
||||||
|
from database import db
|
||||||
|
from database.models import LiveAlert
|
||||||
|
from discordbot import bot
|
||||||
|
from webapp import webapp
|
||||||
|
|
||||||
|
|
||||||
|
async def checkOnlineStreamer(twitch: Twitch) :
|
||||||
|
with webapp.app_context() :
|
||||||
|
alerts : list[LiveAlert] = LiveAlert.query.filter_by(enable = True).all()
|
||||||
|
streams = await _retreiveStreams(twitch, alerts)
|
||||||
|
for alert in alerts :
|
||||||
|
stream = next((s for s in streams if s.user_login == alert.login), None)
|
||||||
|
if stream :
|
||||||
|
if not alert.online :
|
||||||
|
await _notifyAlert(alert, stream)
|
||||||
|
alert.online = True
|
||||||
|
else :
|
||||||
|
alert.online = False
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
async def _notifyAlert(alert : LiveAlert, stream : Stream):
|
||||||
|
message : str = alert.message.format(stream)
|
||||||
|
bot.loop.create_task(_sendMessage(alert.notify_channel, message))
|
||||||
|
|
||||||
|
async def _sendMessage(channel : int, message : str) :
|
||||||
|
await bot.get_channel(channel).send(message)
|
||||||
|
|
||||||
|
async def _retreiveStreams(twitch: Twitch, alerts : list[LiveAlert]) -> list[Stream] :
|
||||||
|
streams : list[Stream] = []
|
||||||
|
async for stream in twitch.get_streams(user_login = [alert.login for alert in alerts]):
|
||||||
|
streams.append(stream)
|
||||||
|
return streams
|
||||||
|
|
||||||
@@ -7,9 +7,11 @@ table td {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: normal;
|
white-space: normal;
|
||||||
max-width: 250px;
|
}
|
||||||
|
|
||||||
|
table.live-alert tr td:last-child {
|
||||||
|
white-space: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.icon {
|
a.icon {
|
||||||
|
|||||||
@@ -5,13 +5,12 @@
|
|||||||
|
|
||||||
{% if not alert %}
|
{% if not alert %}
|
||||||
<h2>Alertes</h2>
|
<h2>Alertes</h2>
|
||||||
<table>
|
<table class="live-alert">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th>Chaine</th>
|
<th>Chaine</th>
|
||||||
<th>Canal</th>
|
<th>Canal</th>
|
||||||
<th>Message</th>
|
<th>Message</th>
|
||||||
<th>Actif</th>
|
|
||||||
<th>#</th>
|
<th>#</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
@@ -23,8 +22,6 @@
|
|||||||
<td>{{alert.message}}</td>
|
<td>{{alert.message}}</td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{{ url_for('toggleLiveAlert', id = alert.id) }}" class="icon">{{ '✅' if alert.enable else '❌' }}</a>
|
<a href="{{ url_for('toggleLiveAlert', id = alert.id) }}" class="icon">{{ '✅' if alert.enable else '❌' }}</a>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<a href="{{ url_for('openEditLiveAlert', id = alert.id) }}" class="icon">✐</a>
|
<a href="{{ url_for('openEditLiveAlert', id = alert.id) }}" class="icon">✐</a>
|
||||||
<a href="{{ url_for('delLiveAlert', id = alert.id) }}"
|
<a href="{{ url_for('delLiveAlert', id = alert.id) }}"
|
||||||
onclick="return confirm('Êtes-vous sûr de vouloir supprimer cette alerte ?')" class="icon">🗑</a>
|
onclick="return confirm('Êtes-vous sûr de vouloir supprimer cette alerte ?')" class="icon">🗑</a>
|
||||||
@@ -53,7 +50,15 @@
|
|||||||
La chaine est le login de la chaine, par exemple <strong>chainesteve</strong> pour <strong>https://www.twitch.tv/chainesteve</strong>.
|
La chaine est le login de la chaine, par exemple <strong>chainesteve</strong> pour <strong>https://www.twitch.tv/chainesteve</strong>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Pour le message vous avez acces à ces variables : <strong>TODO</strong>
|
Pour le message vous avez acces à ces variables :
|
||||||
|
<ul>
|
||||||
|
<li>{0.user_login}</li>
|
||||||
|
<li>{0.user_name}</li>
|
||||||
|
<li>{0.game_name}</li>
|
||||||
|
<li>{0.title}</li>
|
||||||
|
<li>{0.language}</li>
|
||||||
|
<li>{0.thumbnail_url}</li>
|
||||||
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user