Move role menu setup and allow everyone to send it
This commit is contained in:
parent
f03314af80
commit
fdfc2fc88a
@ -59,7 +59,8 @@
|
||||
"missingTreeMessage": "There was a problem finding the Tree message. Please make sure the ``/tree`` and ``/top trees`` messages are this channel, or run </setup:1065407649363005561> to set the ``/tree`` and ``/top trees`` channels.",
|
||||
"missingTreeChannel": "There was a problem finding the Tree channel, was it deleted? Please make sure the ``/tree`` and ``/top trees`` messages are in this channel, or run </setup:1065407649363005561> to set the ``/tree`` and ``/top trees`` channels.",
|
||||
"reset": "All guild configuration information has been removed from the database.",
|
||||
"resetError": "There was a problem deleting your guild information, contact @voidf1sh#0420 for help."
|
||||
"resetError": "There was a problem deleting your guild information, contact @voidf1sh#0420 for help.",
|
||||
"noRoleMenu": "A role menu has not been created for this guild yet. Run </setup rolemenu:0> to create a role menu."
|
||||
},
|
||||
"notifications": {
|
||||
"water": "is ready to be watered again!",
|
||||
|
@ -54,9 +54,9 @@ module.exports = {
|
||||
this.watchChannelId = watchChannelId;
|
||||
return this;
|
||||
}
|
||||
setRoles(waterRole, fruitRole) {
|
||||
this.waterRoleId = waterRole.id;
|
||||
if (fruitRole) this.fruitRoleId = fruitRole.id;
|
||||
setRoles(waterRoleId, fruitRoleId) {
|
||||
this.waterRoleId = waterRoleId;
|
||||
if (fruitRoleId) this.fruitRoleId = fruitRoleId;
|
||||
return this;
|
||||
}
|
||||
queryBuilder(query) {
|
||||
@ -134,9 +134,12 @@ module.exports = {
|
||||
case "setRoles":
|
||||
if (this.fruitRoleId != "") {
|
||||
queryParts = [
|
||||
`UPDATE guild_info SET water_role_id = ${db.escape(this.waterRoleId)}, `,
|
||||
`fruit_role_id = ${db.escape(this.fruitRoleId)} `,
|
||||
`WHERE guild_id = ${db.escape(this.guildId)}`
|
||||
`INSERT INTO guild_info (`,
|
||||
`guild_id, water_role_id, fruit_role_id`,
|
||||
`) VALUES (`,
|
||||
`${db.escape(this.guildId)}, ${db.escape(this.waterRoleId)}, ${db.escape(this.fruitRoleId)}`,
|
||||
`) ON DUPLICATE KEY UPDATE water_role_id = ${db.escape(this.waterRoleId)}, `,
|
||||
`fruit_role_id = ${db.escape(this.fruitRoleId)}`
|
||||
];
|
||||
} else {
|
||||
queryParts = [
|
||||
|
@ -543,7 +543,7 @@ const functions = {
|
||||
const comparedRankings = await this.rankings.compare(interaction, guildInfo);
|
||||
|
||||
const embed = this.builders.comparisonEmbed(comparedRankings, guildInfo);
|
||||
await interaction.update(embed).catch(err => console.error(err));
|
||||
await interaction.update(embed).catch(e => console.error(e));
|
||||
} else {
|
||||
await interaction.update(this.builders.errorEmbed(findMessagesResponse.status));
|
||||
}
|
||||
|
@ -1,30 +1,18 @@
|
||||
const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
|
||||
const dbfn = require('../modules/dbfn.js');
|
||||
const { SlashCommandBuilder } = require('discord.js');
|
||||
const fn = require('../modules/functions.js');
|
||||
const strings = require('../data/strings.json');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('rolemenu')
|
||||
.setDescription('Send a self-assignable role selection menu')
|
||||
.addRoleOption(o =>
|
||||
o.setName('waterrole')
|
||||
.setDescription('The role for water reminder pings')
|
||||
.setRequired(true))
|
||||
.addRoleOption(o =>
|
||||
o.setName('fruitrole')
|
||||
.setDescription('The role for fruit alert pings')
|
||||
.setRequired(false))
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.ManageRoles),
|
||||
.setDescription('Send a self-assignable role selection menu'),
|
||||
async execute(interaction) {
|
||||
await interaction.deferReply().catch(err => console.error(err));
|
||||
await interaction.deferReply().catch(e => console.error(e));
|
||||
if (interaction.client.guildInfos.has(interaction.guildId)) {
|
||||
let guildInfo = interaction.client.guildInfos.get(interaction.guildId);
|
||||
guildInfo.setRoles(interaction.options.getRole('waterrole'), interaction.options.getRole('fruitrole'));
|
||||
await dbfn.setGuildInfo(guildInfo.queryBuilder("setRoles"));
|
||||
await fn.collectionBuilders.guildInfos(interaction.client);
|
||||
await interaction.editReply(fn.builders.embeds.treeRoleMenu(guildInfo)).catch(err => console.error(err));
|
||||
await interaction.editReply(fn.builders.embeds.treeRoleMenu(guildInfo)).catch(e => console.error(e));
|
||||
} else {
|
||||
await interaction.editReply(fn.builders.errorEmbed("No information is known about your server yet, please run /setup or /compare")).catch(err => console.error(err));
|
||||
await interaction.editReply(fn.builders.errorEmbed(strings.status.noRoleMenu)).catch(e => console.error(e));
|
||||
}
|
||||
},
|
||||
};
|
@ -2,37 +2,77 @@ const { SlashCommandBuilder, PermissionFlagsBits } = require('discord.js');
|
||||
const fn = require('../modules/functions.js');
|
||||
const strings = require('../data/strings.json');
|
||||
const dbfn = require('../modules/dbfn.js');
|
||||
const { GuildInfo } = require('../modules/CustomClasses.js');
|
||||
|
||||
module.exports = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('setup')
|
||||
.setDescription('Attempt automatic configuration of the bot.')
|
||||
.addChannelOption(o =>
|
||||
o.setName('treechannel')
|
||||
.setDescription('What channel is your tree in?')
|
||||
.setRequired(true))
|
||||
.addChannelOption(o =>
|
||||
o.setName('leaderboardchannel')
|
||||
.setDescription('If your leaderboard isn\'t in the same channel, where is it?')
|
||||
.setRequired(false))
|
||||
.addSubcommand(sc =>
|
||||
sc.setName('compare')
|
||||
.setDescription('Set up the channels to be used with /compare')
|
||||
.addChannelOption(o =>
|
||||
o.setName('treechannel')
|
||||
.setDescription('What channel is your tree in?')
|
||||
.setRequired(true)
|
||||
)
|
||||
.addChannelOption(o =>
|
||||
o.setName('leaderboardchannel')
|
||||
.setDescription('If your leaderboard isn\'t in the same channel, where is it?')
|
||||
.setRequired(false)
|
||||
)
|
||||
)
|
||||
.addSubcommand(sc =>
|
||||
sc.setName('rolemenu')
|
||||
.setDescription('Setup the roles to be used with /rolemenu')
|
||||
.addRoleOption(o =>
|
||||
o.setName('waterrole')
|
||||
.setDescription('The role for water reminder pings')
|
||||
.setRequired(true)
|
||||
)
|
||||
.addRoleOption(o =>
|
||||
o.setName('fruitrole')
|
||||
.setDescription('The role for fruit alert pings')
|
||||
.setRequired(false)
|
||||
)
|
||||
)
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator),
|
||||
async execute(interaction) {
|
||||
await interaction.deferReply({ ephemeral: true });
|
||||
/**/
|
||||
let guildInfo = {
|
||||
"guildId": interaction.guildId,
|
||||
"treeName": "",
|
||||
"treeHeight": 0,
|
||||
"treeMessageId": "",
|
||||
"treeChannelId": `${interaction.options.getChannel('treechannel').id }`,
|
||||
"leaderboardMessageId": "",
|
||||
"leaderboardChannelId": `${interaction.options.getChannel('leaderboardchannel').id || interaction.options.getChannel('treechannel').id }`,
|
||||
"reminderMessage": "",
|
||||
"reminderChannelId": "",
|
||||
"remindedStatus": 0,
|
||||
"reminderOptIn": 0,
|
||||
};
|
||||
const findMessagesResponse = await fn.messages.find(interaction, guildInfo);
|
||||
interaction.editReply(findMessagesResponse.status);
|
||||
const subcommand = interaction.options.getSubcommand();
|
||||
switch (subcommand) {
|
||||
case "compare":
|
||||
if (interaction.client.guildInfos.has(interaction.guildId)) {
|
||||
let guildInfo = interaction.client.guildInfos.get(interaction.guildId);
|
||||
const findMessagesResponse = await fn.messages.find(interaction, guildInfo);
|
||||
await interaction.editReply(findMessagesResponse.status).catch(e => console.error(e));
|
||||
} else {
|
||||
let guildInfo = new GuildInfo()
|
||||
.setId(interaction.guildId);
|
||||
const findMessagesResponse = await fn.messages.find(interaction, guildInfo);
|
||||
await interaction.editReply(findMessagesResponse.status).catch(e => console.error(e));
|
||||
}
|
||||
break;
|
||||
case "rolemenu":
|
||||
let waterRoleId = interaction.options.getRole('waterrole').id;
|
||||
let fruitRoleId = interaction.options.getRole('fruitrole') ? interaction.options.getRole('fruitrole').id : undefined;
|
||||
if (interaction.client.guildInfos.has(interaction.guildId)) {
|
||||
let guildInfo = interaction.client.guildInfos.get(interaction.guildId);
|
||||
guildInfo.setRoles(waterRoleId, fruitRoleId);
|
||||
await dbfn.setGuildInfo(guildInfo.queryBuilder("setRoles"));
|
||||
await fn.collectionBuilders.guildInfos(interaction.client);
|
||||
await interaction.editReply(fn.builders.embeds.treeRoleMenu(guildInfo)).catch(e => console.error(e));
|
||||
} else {
|
||||
let guildInfo = new GuildInfo()
|
||||
.setId(interaction.guildId);
|
||||
guildInfo.setRoles(waterRoleId, fruitRoleId);
|
||||
await dbfn.setGuildInfo(guildInfo.queryBuilder("setRoles"));
|
||||
await fn.collectionBuilders.guildInfos(interaction.client);
|
||||
await interaction.editReply(fn.builders.embeds.treeRoleMenu(guildInfo)).catch(e => console.error(e));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
},
|
||||
};
|
Loading…
Reference in New Issue
Block a user