mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 06:40:35 +01:00
83 lines
3.1 KiB
Python
83 lines
3.1 KiB
Python
import asyncio
|
|
import datetime
|
|
import discord
|
|
import json
|
|
import logging
|
|
import random
|
|
import requests
|
|
|
|
from database import db
|
|
from database.helpers import ConfigurationHelper
|
|
from database.models import Configuration, GameBundle, Humeur
|
|
from protondb import searhProtonDb
|
|
|
|
|
|
class DiscordBot(discord.Client):
|
|
async def on_ready(self):
|
|
logging.info(f'Logged in as {self.user} (ID: {self.user.id})')
|
|
for c in self.get_all_channels() :
|
|
logging.info(f'{c.id} {c.name}')
|
|
|
|
self.loop.create_task(self.updateStatus())
|
|
self.loop.create_task(self.updateHumbleBundle())
|
|
|
|
async def updateStatus(self):
|
|
while not self.is_closed():
|
|
humeurs = Humeur.query.all()
|
|
if len(humeurs)>0 :
|
|
humeur = random.choice(humeurs)
|
|
if humeur != None:
|
|
logging.info(f'changement de status {humeur.text}')
|
|
await self.change_presence(status = discord.Status.online, activity = discord.CustomActivity(humeur.text))
|
|
# 10 minutes TODO à rendre configurable
|
|
await asyncio.sleep(10*60)
|
|
|
|
async def updateHumbleBundle(self):
|
|
while not self.is_closed():
|
|
if ConfigurationHelper().getValue('humble_bundle_enable') and ConfigurationHelper().getIntValue('humble_bundle_channel') != 0 :
|
|
response = requests.get("http://hexas.shionn.org/humble-bundle/json", headers={ "Content-Type": "application/json" })
|
|
if response.status_code == 200:
|
|
bundle = response.json()
|
|
if GameBundle.query.filter_by(id=bundle['id']).first() == None :
|
|
choice = bundle['choices'][0]
|
|
date = datetime.datetime.fromtimestamp(bundle['endDate']/1000,datetime.UTC).strftime("%d %B %Y")
|
|
message = f"@here **Humble Bundle** propose un pack de jeu [{bundle['name']}]({bundle['url']}) contenant :\n"
|
|
for game in choice["games"]:
|
|
message += f"- {game}\n"
|
|
message += f"Pour {choice['price']}€, disponible jusqu'au {date}."
|
|
await self.get_channel(ConfigurationHelper().getIntValue('humble_bundle_channel')).send(message)
|
|
db.session.add(GameBundle(id=bundle['id'], name=bundle['name'], json = json.dumps(bundle)))
|
|
db.session.commit()
|
|
else:
|
|
logging.error(f"Erreur de connexion {response.status_code}")
|
|
else:
|
|
logging.info('Humble bundle est désactivé')
|
|
# toute les 30 minutes
|
|
await asyncio.sleep(30*60)
|
|
|
|
def begin(self) :
|
|
token = Configuration.query.filter_by(key='discord_token').first()
|
|
if token :
|
|
self.run(token.value)
|
|
else :
|
|
logging.error('pas de token on ne lance pas discord')
|
|
|
|
intents = discord.Intents.default()
|
|
intents.message_content = True
|
|
bot = DiscordBot(intents=intents)
|
|
|
|
@bot.event
|
|
async def on_message(message):
|
|
content: str = message.content;
|
|
if(ConfigurationHelper().getValue('proton_db_enable_enable') and content.find('!protondb')==0) :
|
|
if (content.find('@')>0) :
|
|
user = content[content.find('@'):]
|
|
else :
|
|
user = f'@{message.author.name}'
|
|
name = message.content.replace('!protondb', '').replace(f'{user}', '').strip();
|
|
games = searhProtonDb(name)
|
|
msg = f'{user} J\'ai trouvé {len(games)} jeux :\n'
|
|
for game in games:
|
|
msg += f'- [{game.get('name')}](https://www.protondb.com/app/{game.get('id')}) classé **{game.get('tier')}**\n'
|
|
await message.channel.send(msg)
|