Premlier essai de humble bundle, j'arrive pas à lister les canauxx dans la page de configuration

This commit is contained in:
Kepka Ludovic
2025-08-11 01:03:00 +02:00
parent d242639855
commit 82faed0991
8 changed files with 94 additions and 30 deletions

View File

@@ -9,6 +9,11 @@ class Humeur(db.Model):
enable = db.Column(db.Boolean, default=True) enable = db.Column(db.Boolean, default=True)
text = db.Column(db.String(256)) text = db.Column(db.String(256))
class GameBundle(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(256))
json = db.Column(db.String(1024))
class Message(db.Model): class Message(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=False)

View File

@@ -4,6 +4,18 @@ CREATE TABLE IF NOT EXISTS `configuration` (
`value` VARCHAR(512) NOT NULL `value` VARCHAR(512) NOT NULL
); );
CREATE TABLE IF NOT EXISTS `game_bundle` (
id INTEGER PRIMARY KEY,
name VARCHAR(256) NOT NULL,
json VARCHAR(1024) NOT NULL
);
CREATE TABLE IF NOT EXISTS `humeur` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
`enable` BOOLEAN NOT NULL DEFAULT TRUE,
`text` VARCHAR(256) NULL
);
CREATE TABLE IF NOT EXISTS `message` ( CREATE TABLE IF NOT EXISTS `message` (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
`enable` BOOLEAN NOT NULL DEFAULT FALSE, `enable` BOOLEAN NOT NULL DEFAULT FALSE,
@@ -11,8 +23,3 @@ CREATE TABLE IF NOT EXISTS `message` (
periodicity INTEGER NULL periodicity INTEGER NULL
); );
CREATE TABLE IF NOT EXISTS `humeur` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
`enable` BOOLEAN NOT NULL DEFAULT TRUE,
`text` VARCHAR(256) NULL
);

View File

@@ -1,29 +1,48 @@
import random
import discord
# import os
import logging
import asyncio import asyncio
from webapp import webapp import datetime
from database.models import Configuration, Humeur import discord
import logging
import random
import requests
from database import db
from database.models import Configuration, GameBundle, Humeur
class DiscordBot(discord.Client): class DiscordBot(discord.Client):
async def on_ready(self): async def on_ready(self):
logging.info(f'Logged in as {self.user} (ID: {self.user.id})') logging.info(f'Logged in as {self.user} (ID: {self.user.id})')
for c in self.get_all_channels() : # for c in self.get_all_channels() :
logging.info(f'{c.id} {c.name}') # print(f'{c.id} {c.name}')
self.loop.create_task(self.updateStatus()) self.loop.create_task(self.updateStatus())
# await self.get_channel(1123512494468644984).send("essai en python") self.loop.create_task(self.updateHumbleBundle())
async def updateStatus(self): async def updateStatus(self):
# from database.models import Humeur
humeur = random.choice(Humeur.query.all()) humeur = random.choice(Humeur.query.all())
if humeur != None: if humeur != None:
logging.info(f'changement de status {humeur.text}') logging.info(f'changement de status {humeur.text}')
await self.change_presence(status = discord.Status.online, activity = discord.CustomActivity(humeur.text)) await self.change_presence(status = discord.Status.online, activity = discord.CustomActivity(humeur.text))
await asyncio.sleep(60) await asyncio.sleep(60)
async def updateHumbleBundle(self):
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(1123512494468644984).send(message)
# db.session.add(GameBundle(id=bundle['id'], json = bundle))
# db.session.commit()
else:
logging.error(f"Erreur de connexion {response.status_code}")
await asyncio.sleep(60)
def begin(self) : def begin(self) :
with webapp.app_context():
token = Configuration.query.filter_by(key='discord_token').first() token = Configuration.query.filter_by(key='discord_token').first()
if token : if token :
self.run(token.value) self.run(token.value)
@@ -32,3 +51,4 @@ class DiscordBot(discord.Client):
intents = discord.Intents.default() intents = discord.Intents.default()
bot = DiscordBot(intents=intents) bot = DiscordBot(intents=intents)

View File

@@ -7,3 +7,4 @@ audioop-lts; python_version>='3.13'
flask>=2.3.2 flask>=2.3.2
flask-sqlalchemy>=3.0.3 flask-sqlalchemy>=3.0.3
waitress>=3.0.2 waitress>=3.0.2
requests>=2.32.4

View File

@@ -1,25 +1,32 @@
#
# import discordbot
import multiprocessing import locale
import logging import logging
import multiprocessing
from webapp import webapp
from discordbot import bot
def start_server(): def start_server():
logging.info("Start Web Serveur") logging.info("Start Web Serveur")
from webapp import webapp
from waitress import serve from waitress import serve
serve(webapp, host="0.0.0.0", port=5000) serve(webapp, host="0.0.0.0", port=5000)
# webapp.run()
def start_discord_bot(): def start_discord_bot():
logging.info("Start Discord Bot") logging.info("Start Discord Bot")
from discordbot import bot with webapp.app_context():
bot.begin() bot.begin()
if __name__ == '__main__': if __name__ == '__main__':
locale.setlocale(locale.LC_TIME, 'fr_FR.UTF-8')
jobs = [] jobs = []
jobs.append(multiprocessing.Process(target=start_server))
jobs.append(multiprocessing.Process(target=start_discord_bot)) jobs.append(multiprocessing.Process(target=start_discord_bot))
jobs.append(multiprocessing.Process(target=start_server))
for job in jobs: job.start() for job in jobs: job.start()
print(bot.get_all_channels())
for job in jobs: job.join() for job in jobs: job.join()

View File

@@ -1,4 +1,5 @@
from flask import Flask from flask import Flask
from discordbot import bot
webapp = Flask(__name__) webapp = Flask(__name__)

View File

@@ -2,10 +2,20 @@ from flask import render_template, request, redirect, url_for
from webapp import webapp from webapp import webapp
from database import db from database import db
from database.models import Configuration from database.models import Configuration
from discordbot import bot
@webapp.route("/configurations") @webapp.route("/configurations")
def openConfigurations(): def openConfigurations():
return render_template("configurations.html") all = Configuration.query.all()
configurations = {conf.key: conf for conf in all}
return render_template("configurations.html", configurations = configurations, channels = bot.get_all_channels())
@webapp.route("/updateConfiguration", methods=['POST'])
def updateConfiguration():
return redirect(url_for('openConfigurations'))
@webapp.route('/configurations/set/<key>', methods=['POST']) @webapp.route('/configurations/set/<key>', methods=['POST'])
def setConfiguration(key): def setConfiguration(key):

View File

@@ -3,6 +3,19 @@
{% block content %} {% block content %}
<h1>Configuration de Mamie.</h1> <h1>Configuration de Mamie.</h1>
<h2>Humble Bundle</h2>
<form action="{{ url_for('updateConfiguration') }}" method="POST">
<label for="humble_bundle_channel">Api Discord (cachée)</label>
{{channels}}
<select name="humble_bundle_channel">
{% for channel in channels %}
<option value="{{channel.id}}">{{channel.name}}</option>
{% endfor %}
</select>
<input type="Submit" value="Définir">
</form>
<h2>Api</h2> <h2>Api</h2>
<form action="{{ url_for('setConfiguration', key = 'discord_token') }}" method="POST"> <form action="{{ url_for('setConfiguration', key = 'discord_token') }}" method="POST">
<label for="value">Api Discord (cachée)</label> <label for="value">Api Discord (cachée)</label>