mirror of
https://github.com/skylanix/MamieHenriette.git
synced 2026-02-06 14:50:34 +01:00
Premlier essai de humble bundle, j'arrive pas à lister les canauxx dans la page de configuration
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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
|
|
||||||
);
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
19
run-web.py
19
run-web.py
@@ -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()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from flask import Flask
|
from flask import Flask
|
||||||
|
from discordbot import bot
|
||||||
|
|
||||||
webapp = Flask(__name__)
|
webapp = Flask(__name__)
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user