|
|
@ -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 ? "🥺" : "")); |
|
|
|
} |
|
|
|
} |
|
|
|
}); |