Browse Source

Compte les participants

master
Ludovic 'Archivist' Lagouardette 2 years ago
parent
commit
b9bf3eaed6
2 changed files with 86 additions and 46 deletions
  1. +2
    -1
      .gitignore
  2. +84
    -45
      index.js

+ 2
- 1
.gitignore View File

@ -1,2 +1,3 @@
node_modules/*
database.sqlite
index.js

+ 84
- 45
index.js View File

@ -9,8 +9,9 @@ const sequelize = new Sequelize({
const format = require('util').format;
var ADMIN_ROLENAME = "admin";
var MEMBER_CHANNEL_NAME = "members";
var ADMIN_ROLENAME = "Cadre du Parti";
var MEMBER_ROLENAME = "Membre du Parti";
var MEMBER_CHANNEL_NAME = "annonces-au-peuple";
var EVERYONE_CHANNEL_NAME = "general";
client.login('token');
@ -25,13 +26,13 @@ Partie.init({
max_joueurs: DataTypes.INTEGER
}, { sequelize, modelName: 'Partie' });
err">/*class Joueur extends Model { }
kr">class Joueur extends Model { }
Joueur.init({
discord_id: {
type: DataTypes.STRING,
primaryKey: true
}
}, { sequelize, modelName: 'Joueur' });*/
}, { sequelize, modelName: 'Joueur' });
class Joueur_Partie extends Model { }
Joueur_Partie.init({
@ -44,6 +45,10 @@ Joueur_Partie.init({
type: DataTypes.BOOLEAN,
defaultValue: false
},
membre: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
barbeque: {
type: DataTypes.BOOLEAN,
defaultValue: false
@ -56,6 +61,9 @@ Joueur_Partie.init({
type: DataTypes.BOOLEAN,
defaultValue: false
},
date_inscription: {
type: DataTypes.DATE
},
partie_date_partie: {
type: DataTypes.DATE
},
@ -94,8 +102,10 @@ client.on('ready', () => {
client.on('message', async function(msg) {
if(msg.guild == undefined) return; // Pour que les DM trigger pas les call
const admin_role = msg.guild.roles.cache.find(r => (r.name == ADMIN_ROLENAME));
const member_role = msg.guild.roles.cache.find(r => (r.name == MEMBER_ROLENAME));
const member_channel = msg.guild.channels.cache.find(r => (r.name == MEMBER_CHANNEL_NAME));
if (msg.content.startsWith('/organiser ') && msg.member.roles.cache.find(r => (r == admin_role))) {
const is_admin = msg.member.roles.cache.find(r => (r == admin_role));
if (msg.content.startsWith('/organiser ') && is_admin) {
const args = msg.content.split(/(\s+)/).filter(e => (e.trim().length > 0));
const parser = /^(\d{2})\/(\d{2})$/;
@ -103,6 +113,7 @@ client.on('message', async function(msg) {
const date_fin_exclu = adjust_date(args[2].match(parser)).toISOString();
const nb_joueurs = parseInt(args[3].match(parser));
const partie = Partie.build({
date_partie: date_de_partie,
date_fin_exclu: date_fin_exclu,
@ -122,53 +133,81 @@ Réagissez avec 👍 pour recevoir le formulaire d'inscription!
const collector = message.createReactionCollector(v => (true), {});
collector.on('collect', async function(m) {
m.users.cache.forEach(async function(user, _) {
if(user.id == client.user.id) return;
const j = await Joueur.findOrCreate({where: {discord_id: user.id}, default: {discord_id: user.id}});
var [p, _] = await Joueur_Partie.findOrCreate({
where: {joueur_discord_id: user.id, partie_date_partie: partie.date_partie},
default: {joueur_discord_id: user.id, partie_date_partie: partie.date_partie}
});
try{
m.users.cache.forEach(async function(user, _) {
const member = await msg.guild.members.fetch(user.id);
console.log(user.id);
const is_member = member.roles.cache.find(r => (r == member_role));
console.log(user);
if(user.id == client.user.id) return;
const j = await Joueur.findOrCreate({where: {discord_id: user.id}, default: {discord_id: user.id}});
var [p, _] = await Joueur_Partie.findOrCreate({
where: {joueur_discord_id: user.id, partie_date_partie: partie.date_partie},
default: {joueur_discord_id: user.id, partie_date_partie: partie.date_partie}
});
if(!p.envoi_dm) {
const discord_user = await client.users.fetch(user.id)
const dms = await discord_user.createDM();
const sent_dm = await dms.send(
if(!p.envoi_dm) {
const discord_user = await client.users.fetch(user.id);
const dms = await discord_user.createDM();
if(is_member || date_fin_exclu <= new Date()) {
const sent_dm = await dms.send(
format(`
Pour vous inscrire à la partie du %s, réagissez à ce message avec l'émote appropriée:
🔫: Participe à la partie
🍴: Participe au repas
🥺: Loue une réplique
`, partie.date_partie));
await p.save();
await sent_dm.react('🔫');
await sent_dm.react('🍴');
await sent_dm.react('🥺');
const personal_collector = sent_dm.createReactionCollector(v => (true), {});
personal_collector.on('collect', async function(m) {
console.log(m._emoji.name);
for(var [user, rest] of m.users.cache) {
if(user != client.user.id) {
var element = await Joueur_Partie.findOne({where: {joueur_discord_id: user, partie_date_partie: date_de_partie}});
if(m._emoji.name == '🔫') {
element.participe = true;
console.log(await element.save());
} else if(m._emoji.name == '🍴') {
element.barbeque = true;
await element.save();
} else if(m._emoji.name =='🥺') {
element.location = true;
await element.save();
: Ce bot n'as pas encore de fonctionalité pour annuler votre inscription, en cas d'annulation, prévenez @asitiglutama#1025
`, args[1]));
await p.save();
await sent_dm.react('🔫');
await sent_dm.react('🍴');
await sent_dm.react('🥺');
const personal_collector = sent_dm.createReactionCollector(v => (true), {});
personal_collector.on('collect', async function(m) {
try {
console.log(m._emoji.name);
for(var [user, rest] of m.users.cache) {
if(user != client.user.id) {
var element = await Joueur_Partie.findOne({where: {joueur_discord_id: user, partie_date_partie: date_de_partie}});
if(m._emoji.name == '🔫') {
const partie = await Partie.findOne({where: {date_partie: date_de_partie}});
const participants = await Joueur_Partie.count({where: {partie_date_partie: date_de_partie, participe: true}});
if(participants >= nb_joueurs) {
const sent_dm = await dms.send("Impossible de vous inscrire, la partie est pleine");
} else {
element.participe = true;
element.date_inscription = new Date();
await element.save();
}
} else if(m._emoji.name == '🍴') {
element.barbeque = true;
await element.save();
} else if(m._emoji.name =='🥺') {
element.location = true;
await element.save();
}
}
}
} catch (ex) {
}
}
});
p.envoi_dm = true;
await p.save();
} else {
const sent_dm = await dms.send(
format(`
Pour vous inscrire à la partie du %s, vous devez être membre de la NvA ou attendre la fin de l'exclusivité le %s!
`, args[1], args[2]));
}
});
p.envoi_dm = true;
await p.save();
}
});
}
});
} catch(ex) {
nx">console.log(ex);
}
})
} else if (msg.content.startsWith('/liste ') && msg.member.roles.cache.find(r => (r == admin_role))) {
const args = msg.content.split(/(\s+)/).filter(e => (e.trim().length > 0));
@ -187,7 +226,7 @@ Pour vous inscrire à la partie du %s, réagissez à ce message avec l'émote ap
await dm.send(format("Liste de la partie du %s\ninscrits=%i\nrepas=%i\nloca=%i", args[1], participants, repas, loca));
for(const element of liste) {
const inscrit = await client.users.fetch(element.joueur_discord_id);
await dm.send(format(inscrit.username));
await dm.send(format(inscrit.username)o">+" "+(inscrit.participe ? "🔫" : "")+(inscrit.barbeque ? "🍴" : "")+(inscrit.location ? "🥺" : ""));
}
}
});

Loading…
Cancel
Save