Files
MamieHenriette/discordbot/humblebundle.py
2025-08-27 16:03:10 +02:00

50 lines
1.9 KiB
Python

import datetime
import logging
import json
import requests
from database import db
from database.helpers import ConfigurationHelper
from database.models import GameBundle
from discord import Client
def _isEnable():
helper = ConfigurationHelper()
return helper.getValue('humble_bundle_enable') and helper.getIntValue('humble_bundle_channel') != 0 and helper.getValue('humble_bundle_api_key')
def _callHexas():
headers = { "Content-Type": "application/json", "api-key":ConfigurationHelper().getValue('humble_bundle_api_key') }
response = requests.get("http://hexas.shionn.org/humble-bundle/json", headers=headers)
if response.status_code == 200:
return response.json()
logging.error(f"Échec de la connexion à l'API Humble Bundle. Code de statut HTTP : {response.status_code}")
return None
def _isNotAlreadyNotified(bundle):
return GameBundle.query.filter_by(id=bundle['id']).first() == None
def _formatMessage(bundle):
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}."
return message
async def checkHumbleBundleAndNotify(bot: Client):
if _isEnable() :
try :
bundle = _callHexas()
if bundle != None and _isNotAlreadyNotified(bundle) :
message = _formatMessage(bundle)
await bot.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()
except Exception as e:
logging.error(f"Échec de la vérification des offres Humble Bundle : {e}")
else:
logging.info('Humble Bundle est désactivé')