added reactions + reaction controll command (it can assign all types and setup messages)

This commit is contained in:
2022-12-28 22:28:50 +01:00
parent d1e26ac9bb
commit 16dac26a2c
5 changed files with 173 additions and 54 deletions

View File

@ -1,5 +1,6 @@
const {MessageReaction, PartialMessageReaction, User} = require("discord.js")
const {MessageReaction, PartialMessageReaction, User, RoleSelectMenuBuilder} = require("discord.js")
const {Connection} = require("mysql")
const Roles = require("./Roles");
/**
reaction programming syntax
@ -26,8 +27,12 @@ const DevData = {
reactions: {
"👀":{
Action: "role",
Role: "test",
Restriction: "AddOnly"
Role: {
Name: "Gold Role",
ID: "1051891644007469096"
},
Restriction: "AddOnly",
MessageType: "public",
}
}
},
@ -37,12 +42,14 @@ const DevData = {
"✅":{
Action: "vote-yes",
Role: "null",
Restriction: "null"
Restriction: "null",
MessageType: "public",
},
"🚫":{
Action: "vote-no",
Role: "null",
Restriction: "null"
Restriction: "null",
MessageType: "public",
}
}
}
@ -55,29 +62,69 @@ const DevData = {
* @param {Connection} Database current databes instance
* @param {string} Action string of current action happening
*/
const HandleReaction = async (reaction, user, database, Action) => {
const HandleReaction = async (reaction, user, database, Action, bot) => {
// Handle if reaction is partial and therefor might throw api errors
if (reaction.partial){
try{
// global values
let message = reaction.message
try{
// global values
let message = reaction.message
console.log(Action);
// Route Actions
switch (Action) {
case "add":
console.log(DevData[message.id].type)
break;
case "remove":
// Reverses all actions
// at this point of development pointless to spend development time on
break;
}
}catch (e) {
console.log(e)
return
// Route Actions
switch (Action) {
case "add":
// console.log(DevData[message.id].type)
// console.log(DevData[message.id].reactions[reaction.emoji.name].Role)
switch (DevData[message.id].type) {
case 'reactionRole':
userRoles = reaction.message.guild.members.cache.get(user.id)
// Detect if user already has that Role
if (!userRoles.roles.cache.has(DevData[message.id].reactions[reaction.emoji.name].Role.ID)) {
Roles.AddRole(userRoles, DevData[message.id].reactions[reaction.emoji.name].Role.Name, bot, "added via automation", message).then(() => {
message.channel.send(`@${user.username} got ${DevData[message.id].reactions[reaction.emoji.name].Role.Name} added`). then(async msg => {
setTimeout(() => {
msg.delete();
},5000)
}).catch(err => {
console.log("could not send message due to error in reactions.HandleReaction: " + err)
});
}).catch(err => {
console.log("could not add role to client due to error in reactions.HandleReaction: " + err)
});
}
break;
}
break;
case "remove":
console.log("remove trigger")
// Reverses all actions
// at this point of development pointless to spend development time on
switch (DevData[message.id].type) {
case 'reactionRole':
console.log("reaction role trigger")
userRoles = reaction.message.guild.members.cache.get(user.id)
console.log(userRoles.roles.cache.has(DevData[message.id].reactions[reaction.emoji.name].Role.ID))
// Detect if user already has that Role
if (userRoles.roles.cache.has(DevData[message.id].reactions[reaction.emoji.name].Role.ID)) {
console.log("call removerole function")
Roles.RemoveRole(userRoles, DevData[message.id].reactions[reaction.emoji.name].Role.Name, bot, "removed via automation", message);
message.channel.send(`@${user.username} got ${DevData[message.id].reactions[reaction.emoji.name].Role.Name} removed`). then(async msg => {
setTimeout(() => {
msg.delete();
},5000)
}).catch(err => {
console.log("could not send message due to error in reactions.HandleReaction: " + err)
});
}
break;
}
break;
}
} else {
console.error("error while checking if reaction was partial")
}catch (e) {
console.log(e)
return
}
}

View File

@ -4,25 +4,27 @@ const discord = require("discord.js")
@param {discord.GuildMember} userVal the target user
@param {string} roleName name of role to assign a user
@param {discord.Client} bot the bots instance
@param {discord.Message} message the bots instance
*/
const AddRole = async (userVal, roleName, bot) => {
const AddRole = async (userVal, roleName, bot, reason, message) => {
// error handling
if (userVal == undefined) { throw "error user was undefined" }
if (roleName == undefined) { throw "error roleNames was undefined" }
if (bot == undefined) { throw "error bot was undefined" }
if (typeof(userVal) != "Discord.GuildMember") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(userVal) != "object") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleName) != "string") { throw "error roleNames is not of type string" }
if (typeof(bot) != "Discord.Client") { throw "error roleNames is not of type Discord.Client" }
if (typeof(bot) != "object") { throw "error roleNames is not of type Discord.Client" }
// fetching required data
const guild = bot.guilds.cache.first()
const role = guild.roles.find("name", roleName)
const role = bot.guilds.cache.find(guild => guild.id === message.guild.id).roles.cache.find(role => role.name === roleName)
if (role == undefined) {
throw `error couldnt find role ${role}`
}
userVal.roles.add(role, reason)
userVal.roles.add(role, reason).catch(error => {
console.log("an error occured in roles.AddRole: " + err)
})
}
/**
@ -35,21 +37,23 @@ const AddRoles = async (userVal, roles, bot, reason) => {
// error handling
if (userVal == undefined) { throw "error user was undefined" }
if (roleNames == undefined) { throw "error roleNames was undefined" }
if (roleName == undefined) { throw "error roleNames was undefined" }
if (bot == undefined) { throw "error bot was undefined" }
if (typeof(userVal) != "Discord.GuildMember") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleNames) != "object") { throw "error roleNames is not of type object" }
if (typeof(bot) != "Discord.Client") { throw "error roleNames is not of type Discord.Client" }
if (typeof(userVal) != "object") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleName) != "string") { throw "error roleNames is not of type string" }
if (typeof(bot) != "object") { throw "error roleNames is not of type Discord.Client" }
// fetching required data
const guild = bot.guilds.cache.first()
roles.forEach(r => {
const role = guild.roles.find("name", r.name)
const role = bot.guilds.cache.find(guild => guild.id === message.guild.id).roles.cache.find(role => role.name === roleName)
if (role == undefined) {
throw `error couldnt find role ${role}`
}
userVal.roles.add(role, r.reason)
userVal.roles.add(role, r.reason).catch(err => {console.log("error in roles.Addrole" + err)})
})
}
@ -59,24 +63,27 @@ revokes a given role to a given user
@param {string} roleName name of role to assign a user
@param {discord.Client} bot the bots instance
*/
const RemoveRole = async (userVal, roleName, bot, reason) => {
const RemoveRole = async (userVal, roleName, bot, reason, message) => {
console.log("RemoveRole Function Call")
// error handling
if (userVal == undefined) { throw "error user was undefined" }
if (roleName == undefined) { throw "error roleNames was undefined" }
if (bot == undefined) { throw "error bot was undefined" }
if (typeof(userVal) != "Discord.GuildMember") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(userVal) != "object") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleName) != "string") { throw "error roleNames is not of type string" }
if (typeof(bot) != "Discord.Client") { throw "error roleNames is not of type Discord.Client" }
if (typeof(bot) != "object") { throw "error roleNames is not of type Discord.Client" }
// fetching required data
const guild = bot.guilds.cache.first()
const role = guild.roles.find("name", roleName)
const role = bot.guilds.cache.find(guild => guild.id === message.guild.id).roles.cache.find(role => role.name === roleName)
if (role == undefined) {
throw `error couldnt find role ${role}`
}
userVal.roles.remove(role, reason)
userVal.roles.remove(role, reason).catch(error => {
console.log("an error occured in roles.AddRole: " + err)
})
}
/**
@ -100,20 +107,26 @@ const RemoveRoles = async (userVal, roles, bot) => {
// error handling
if (userVal == undefined) { throw "error user was undefined" }
if (roleNames == undefined) { throw "error roleNames was undefined" }
if (roleName == undefined) { throw "error roleNames was undefined" }
if (bot == undefined) { throw "error bot was undefined" }
if (typeof(userVal) != "Discord.GuildMember") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleNames) != "object") { throw "error roleNames is not of type object" }
if (typeof(bot) != "Discord.Client") { throw "error roleNames is not of type Discord.Client" }
if (typeof(userVal) != "object") { throw "error userVal is not of type Discord.GuildMember" }
if (typeof(roleName) != "string") { throw "error roleNames is not of type string" }
if (typeof(bot) != "object") { throw "error roleNames is not of type Discord.Client" }
// fetching required data
const guild = bot.guilds.cache.first()
roles.forEach(r => {
const role = guild.roles.find("name", r.name)
const role = bot.guilds.cache.find(guild => guild.id === message.guild.id).roles.cache.find(role => role.name === r.name)
if (role == undefined) {
throw `error couldnt find role ${role}`
}
userVal.roles.remove(role, r.reason)
userVal.roles.remove(role, reason).catch(error => {
console.log("an error occured in roles.AddRole: " + err)
})
})
}
}
module.exports = {AddRole, AddRoles, RemoveRole, RemoveRoles}