diff options
author | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
---|---|---|
committer | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
commit | adc05627661e4b229037dc1e43410846078f4996 (patch) | |
tree | 8bbd7d34085007e36207f8e8c5976b7de64a7b3b /commands/mod |
init
Diffstat (limited to 'commands/mod')
-rw-r--r-- | commands/mod/autoreact.js | 57 | ||||
-rw-r--r-- | commands/mod/defaults/autoreact.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/log.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/motw.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/search.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/sticky.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/ticket.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/timed-message.js.json | 2 | ||||
-rw-r--r-- | commands/mod/defaults/whois.js.json | 2 | ||||
-rw-r--r-- | commands/mod/log.js | 27 | ||||
-rw-r--r-- | commands/mod/motw.js | 34 | ||||
-rw-r--r-- | commands/mod/search.js | 70 | ||||
-rw-r--r-- | commands/mod/sticky.js | 57 | ||||
-rw-r--r-- | commands/mod/ticket.js | 96 | ||||
-rw-r--r-- | commands/mod/timed-message.js | 76 | ||||
-rw-r--r-- | commands/mod/whois.js | 120 |
16 files changed, 553 insertions, 0 deletions
diff --git a/commands/mod/autoreact.js b/commands/mod/autoreact.js new file mode 100644 index 0000000..229116b --- /dev/null +++ b/commands/mod/autoreact.js @@ -0,0 +1,57 @@ +const fs = require('fs') +const path = require("path"); +const db = require("../../src/db") +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +const {upload_limit} = require("../../src/util") +module.exports = { + name : "autoreact", + command: ["react"], + mod_only: true, + config:config, + config_loc:config_loc, + async main (client,Discord,message,args){ + switch(args[0]){ + case 'add': + case 'a': + if(args.length<3){ + message.reply("not enough parameters, try `sns help react`") + break; + } + db.Auto_React.create({channel:args[1],emote:args[2]}); + message.react("✅") + break; + case 'rem': + case 'remove': + case 'r': + if(args.length<2){ + message.reply("not enough parameters, try `sns help react`") + break; + } + let initial = await db.Auto_React.count() + await db.Auto_React.destroy({ + where: { + channel: args[1] + } + }); + message.reply("removed "+(initial-(await db.Auto_React.count()))+" item(s)") + break; + case 'dump': + case 'list': + let list = await db.Auto_React.findAll() + let flist = "channel : emote" + for(let l of list) + flist+=l.channel+" : "+l.emote+"\n" + let filename = "/tmp/autoreact.json" + fs.writeFileSync(filename,flist) + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(message.guild)) + return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + message.reply({files:[filename]}) + break; + default: + message.reply("unknown action, try `sns help react`") + } + + }, +}
\ No newline at end of file diff --git a/commands/mod/defaults/autoreact.js.json b/commands/mod/defaults/autoreact.js.json new file mode 100644 index 0000000..7f976dc --- /dev/null +++ b/commands/mod/defaults/autoreact.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"React to every new post in channel:3","restrict":[],"restricted":[], +"usage":"{command} {add {channel} {emote}|rem {channel}|dump}"}
\ No newline at end of file diff --git a/commands/mod/defaults/log.js.json b/commands/mod/defaults/log.js.json new file mode 100644 index 0000000..a5edd7d --- /dev/null +++ b/commands/mod/defaults/log.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Print logs","restrict":[],"restricted":[], +"usage":"{command}"}
\ No newline at end of file diff --git a/commands/mod/defaults/motw.js.json b/commands/mod/defaults/motw.js.json new file mode 100644 index 0000000..9412b0b --- /dev/null +++ b/commands/mod/defaults/motw.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Announce the Member of the Week","restrict":[],"restricted":[], +"usage":"{command} {user} {image}"}
\ No newline at end of file diff --git a/commands/mod/defaults/search.js.json b/commands/mod/defaults/search.js.json new file mode 100644 index 0000000..0ef94c9 --- /dev/null +++ b/commands/mod/defaults/search.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Search for a username/nickname","restrict":[],"restricted":[], +"usage":"{command} {name} [percent (end with %)]"}
\ No newline at end of file diff --git a/commands/mod/defaults/sticky.js.json b/commands/mod/defaults/sticky.js.json new file mode 100644 index 0000000..4717847 --- /dev/null +++ b/commands/mod/defaults/sticky.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Make a message sticky (i douse it in honey)! Message will always stay at the bottom of the feed","restrict":[],"restricted":[], +"usage":"{command} {add {channel} {message}|rem {channel}|dump} [embed]","embed_color":"#fcc356"}
\ No newline at end of file diff --git a/commands/mod/defaults/ticket.js.json b/commands/mod/defaults/ticket.js.json new file mode 100644 index 0000000..095cdef --- /dev/null +++ b/commands/mod/defaults/ticket.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Interact with the tickets database, and respond to them.","restrict":[],"restricted":[], +"usage":"{command} {reply {ticket} [message] [attachments]|close {ticket}|dump {ticket}"}
\ No newline at end of file diff --git a/commands/mod/defaults/timed-message.js.json b/commands/mod/defaults/timed-message.js.json new file mode 100644 index 0000000..a330425 --- /dev/null +++ b/commands/mod/defaults/timed-message.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Send a message per interval:)","restrict":[],"restricted":[], +"usage":"{command} {add {channel} {message} {delay (in s,m,h,d)} |rem {channel}|dump} [embed]","embed_color":"#fcc356"}
\ No newline at end of file diff --git a/commands/mod/defaults/whois.js.json b/commands/mod/defaults/whois.js.json new file mode 100644 index 0000000..ef027ae --- /dev/null +++ b/commands/mod/defaults/whois.js.json @@ -0,0 +1,2 @@ +{"cooldown":-1,"desc":"Get info on user or role","restrict":[],"restricted":[], +"usage":"{command} {userid|roleid|mention}"}
\ No newline at end of file diff --git a/commands/mod/log.js b/commands/mod/log.js new file mode 100644 index 0000000..170f48e --- /dev/null +++ b/commands/mod/log.js @@ -0,0 +1,27 @@ +const Discord = require("discord.js") +const settings = require("../../src/settings") +const fs = require('fs') +const {upload_limit} = require("../../src/util") +const path = require('path') +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "log", + command: ["log"], + mod_only:true, + config:config, + config_loc:config_loc, + main(client,Discord,message,args) { + this.exec(message) + }, + s_main(client,Discord,interaction){ + this.exec(interaction) + }, + exec(message){ + let filename = path.join(__dirname+"../../../log") + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(message.guild)) + return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + message.reply({files:[filename]}) + } +};
\ No newline at end of file diff --git a/commands/mod/motw.js b/commands/mod/motw.js new file mode 100644 index 0000000..a5984c4 --- /dev/null +++ b/commands/mod/motw.js @@ -0,0 +1,34 @@ +const Discord = require("discord.js") +const { EmbedBuilder } = require("discord.js"); +const { PermissionsBitField } = require('discord.js'); +const settings = require("../../src/settings") +const fs = require('fs') +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "motw", + command: ["motw"], + mod_only:true, + config:config, + config_loc:config_loc, + main(client,Discord,message,args) { + var cmd = message.content.slice(9).split(/ +/g); + var name = cmd.shift(); + var image = cmd.join(" "); + this.exec(client,{message:message,name:name,image:image}) + }, + s_options:[{type:"user",name:"user",desc:"member of the week!",required:true,autocomplete:false}, + {type:"string",name:"image",desc:"your fancy motw image:3",required:true,autocomplete:false}], + s_main(client,Discord,interaction){ + this.exec(client,{name:"<@!"+interaction.options.getUser("user").id+">",image:interaction.options.getString("image"),message:interaction}) + interaction.reply({content:"all done:3",ephemeral: true}) + }, + exec(client,param){ + const motw = new EmbedBuilder() + .setTitle("Member of the Week") + .setColor(settings.defaultColor) + .setDescription(param.name) + .setImage(param.image); + param.message.channel.send({ embeds: [motw] }); + } +};
\ No newline at end of file diff --git a/commands/mod/search.js b/commands/mod/search.js new file mode 100644 index 0000000..e81c3c8 --- /dev/null +++ b/commands/mod/search.js @@ -0,0 +1,70 @@ +const Discord = require("discord.js") +const { EmbedBuilder } = require("discord.js"); +const { PermissionsBitField } = require('discord.js'); +const settings = require("../../src/settings") +const {similarity} = require("../../src/util") +const fs = require('fs') +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "search", + command: ["search"], + mod_only:true, + config:config, + config_loc:config_loc, + async main(client,Discord,message,args) { + let per = 60; + for(let a of args){ + if(a.length>=2&&a[a.length-1]=="%"&&a[a.length-2]!="%"){ + a[a.length-1]="" + per = parseInt(a) + args.splice(args.indexOf(a), 1); + } + } + let dec = per/100 + let mem = Object.fromEntries(await message.guild.members.fetch()) + let found = [] + let count = 0 + for(let k of Object.keys(mem)){ + let s = similarity(mem[k].user.username.toLowerCase(),args[0].toLowerCase()) + if(mem[k].nickname!=null){ + s=Math.max(s,similarity(mem[k].nickname.toLowerCase(),args[0].toLowerCase())) + } + if(s>dec){ + found.push({sim:s,id:mem[k].id}) + count++; + } + } + if(count==0) + return message.reply("no usernames/nicknames found (within a "+per+"% similarity)") + for(let i = 0; i<count-1; i++){ + if(i<0)i=0 + if(found[i+1].sim>found[i].sim){ + let t = found[i+1] + found[i+1] = found[i] + found[i] = t + i-=2; + } + } + let p_found = "" + for(let i = 0; i!=count; i++){ + let new_m = "(<@"+found[i].id+"> @ " + Math.floor(found[i].sim * 100) + "%) " + if((p_found+new_m).length>1024-3){ + p_found+="..." + break; + } + p_found+=new_m + } + message.channel.send("loading ids").then(async(m)=>{ + await m.edit(p_found) + m.delete() + }) + let embed = new EmbedBuilder() + .setTitle("Usernames close to '"+args[0]+"' (≥"+per+"%)") + .setDescription(p_found) + .setColor(settings.defaultColor) + .setFooter({text:count+' user(s) found • Up to '+Math.floor(found[0].sim * 100) + '% similarity'}) + message.channel.send({embeds:[embed]}) + + } +};
\ No newline at end of file diff --git a/commands/mod/sticky.js b/commands/mod/sticky.js new file mode 100644 index 0000000..b3dc055 --- /dev/null +++ b/commands/mod/sticky.js @@ -0,0 +1,57 @@ +const fs = require('fs') +const path = require("path"); +const db = require("../../src/db") +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +const {upload_limit} = require("../../src/util") +module.exports = { + name : "sticky", + command: ["sticky"], + mod_only: true, + config:config, + config_loc:config_loc, + async main (client,Discord,message,args){ + switch(args[0]){ + case 'add': + case 'a': + if(args.length<3){ + message.reply("not enough parameters, try `sns help sticky`") + break; + } + db.Sticky.create({channel:args[1],message:args[2],last_message:'null',embed:args.includes("embed"),embed_color:config.embed_color}); + message.react("✅") + break; + case 'rem': + case 'remove': + case 'r': + if(args.length<2){ + message.reply("not enough parameters, try `sns help sticky`") + break; + } + let initial = await db.Sticky.count() + await db.Sticky.destroy({ + where: { + channel: args[1] + } + }); + message.reply("removed "+(initial-(await db.Sticky.count()))+" item(s)") + break; + case 'dump': + case 'list': + let list = await db.Sticky.findAll() + let flist = "channelid : message : last message\n" + for(let l of list) + flist+=l.channel+" : "+l.message+" : "+l.last_message+"\n" + let filename = "/tmp/sticky.json" + fs.writeFileSync(filename,flist) + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(message.guild)) + return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + message.reply({files:[filename]}) + break; + default: + message.reply("unknown action, try `sns help sticky`") + } + + }, +}
\ No newline at end of file diff --git a/commands/mod/ticket.js b/commands/mod/ticket.js new file mode 100644 index 0000000..5e69ed7 --- /dev/null +++ b/commands/mod/ticket.js @@ -0,0 +1,96 @@ +const Discord = require("discord.js") +const { EmbedBuilder } = require("discord.js"); +const { PermissionsBitField, MessageAttachment } = require('discord.js'); +const {upload_limit} = require("../../src/util") +const settings = require("../../src/settings") +const fs = require('fs'); +let db = require("../../src/db") +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "ticket", + command: ["ticket"], + mod_only:true, + config:config, + config_loc:config_loc, + async main(client,Discord,message,args) { + let matt = Array.from(message.attachments, ([name, value]) => ({ name, value })) + + let action = args[0]; + let ticket_id = args[1]; + args.shift();args.shift(); + let r_message = args.join(' ') + + this.exec(client,{att:matt,action:action,ticket_id:ticket_id,r_message:r_message,message:message}) + }, + s_options:[{type:"string",name:"ticket",desc:"ticket id",required:true,autocomplete: async function(){ let tik = await db.Tickets.findAll({attributes:['ticket'],where:{status:'open'}}); let out = []; for(let t of tik) out.push(t.ticket); return out; }}, + {type:"string",name:"action",desc:"operation to perform",required:true,autocomplete:["reply","close","dump"]}, + {type:"string",name:"message",desc:"message to reply with",required:false,autocomplete:false}, + {type:"attachment",name:"attachment",desc:"attachment to reply with",required:false,autocomplete:false}], + async s_main(client,Discord,interaction){ + this.exec(client,{message:interaction,att:[interaction.options.getAttachment("attachment")] ?? [],action:interaction.options.getString("action"), + ticket_id:interaction.options.getString("ticket"),r_message:interaction.options.getString("message")}) + }, + async exec(client,param){ + let tickets; + let date = new Date().toLocaleString() + switch(param.action){ + case 'reply': + case 'respond': + case 'r': + if(param.r_message==null&¶m.att==null) + return param.message.reply("you must provide a message or attachment") + tickets = await db.Tickets.findAll({where:{status:'open',ticket:param.ticket_id}}) + if(tickets.length==0){ + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(tickets.length==0) + return param.message.reply("ticket not found:c") + return param.message.reply("ticket is not open") + } + let ticket = tickets[0] + let messages = JSON.parse(ticket.messages) + messages.push({message:param.r_message,attachments:param.att,mod:true}) + db.Tickets.update({'messages':JSON.stringify(messages)},{where:{id:ticket.id}}) + + const embed = new EmbedBuilder() + .setTitle("Updated Ticket | "+ticket.ticket) + .setColor(settings.defaultColor) + .setDescription("Message: '"+param.r_message+"'") + .setFooter({text:"Created: "+date}) + let smatt = [] + for(let att of param.att){ + if(att!=null) + smatt.push({attachment:att?.value?.url ?? att?.url}) + } + param.message.client.users.cache.get(ticket.author).send({embeds:[embed],files:smatt}) + param.message.reply("updated ticket "+ticket.ticket); + break; + case 'close': + tickets = await db.Tickets.findAll({where:{status:'open',ticket:param.ticket_id}}) + if(tickets.length==0){ + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(ticket.length==0) + return param.message.reply("ticket not found:c") + return param.message.reply("ticket is already closed") + } + db.Tickets.update({'status':'closed'},{where:{id:tickets[0].id}}) + param.message.reply("closed ticket "+tickets[0].ticket); + break; + case 'dump': + case 'list': + tickets = await db.Tickets.findAll({where:{ticket:param.ticket_id}}) + if(tickets.length==0){ + return param.message.reply("ticket not found:c") + } + let filename = "/tmp/"+tickets[0].ticket+".json" + fs.writeFileSync(filename,tickets[0].messages) + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(param.message.guild)) + return param.message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + param.message.reply({files:[filename]}) + break; + default: + param.message.reply("unknown action, try `sns help ticket`") + } + } +};
\ No newline at end of file diff --git a/commands/mod/timed-message.js b/commands/mod/timed-message.js new file mode 100644 index 0000000..35789da --- /dev/null +++ b/commands/mod/timed-message.js @@ -0,0 +1,76 @@ +const fs = require('fs') +const path = require("path"); +const db = require("../../src/db") +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +const {upload_limit} = require("../../src/util") +let valid_times = {"s":1000,"m":60000,"h":3.6e+6,"d":8.64e+7} +module.exports = { + name : "timed message", + command: ["timed"], + mod_only: true, + config:config, + config_loc:config_loc, + async main (client,Discord,message,args){ + switch(args[0]){ + case 'add': + case 'a': + if(args.length<3){ + message.reply("not enough parameters, try `sns help timed`") + break; + } + let del_ind = args.indexOf("delay") + if(del_ind==-1||del_ind==args.length-1){ + message.reply("invalid usage! i need a delay") + break; + } + if(!Object.keys(valid_times).includes(args[del_ind+1][args[del_ind+1].length-1])){ + message.reply("please end your delay with either s,m,h, or d") + break; + } + let time = args[del_ind+1] + let ind = time[time.length-1] + time[time.length-1] = ''; + time = valid_times[ind] * parseInt(time) + if(time==NaN){ + message.reply("invalid delay") + break; + } + db.Timed_Message.create({channel:args[1],message:args[2],last_message:'null',last_message_time:'null',embed:args.includes("embed"),embed_color:config.embed_color,delay:time,guild:message.guild.id}) + //db.Sticky.create({channel:args[1],message:args[2],last_message:'null',embed:args.includes("embed"),embed_color:config.embed_color}); + message.react("✅") + break; + case 'rem': + case 'remove': + case 'r': + if(args.length<2){ + message.reply("not enough parameters, try `sns help timed`") + break; + } + let initial = await db.Timed_Message.count() + await db.Timed_Message.destroy({ + where: { + channel: args[1] + } + }); + message.reply("removed "+(initial-(await db.Timed_Message.count()))+" item(s)") + break; + case 'dump': + case 'list': + let list = await db.Timed_Message.findAll() + let flist = "channelid : message : last message : last message time : delay : color\n" + for(let l of list) + flist+=l.channel+" : "+l.message+" : "+l.last_message+" : "+l.last_message_time+" : " + l.delay + " : " + l.embed_color + "\n" + let filename = "/tmp/timed.json" + fs.writeFileSync(filename,flist) + let stats = fs.statSync(filename) + if(stats.size / (1024*1024) > upload_limit(message.guild)) + return message.reply("file too large:( file is "+stats.size / (1024*1024)+"mb") + message.reply({files:[filename]}) + break; + default: + message.reply("unknown action, try `sns help timed`") + } + + }, +}
\ No newline at end of file diff --git a/commands/mod/whois.js b/commands/mod/whois.js new file mode 100644 index 0000000..56d2645 --- /dev/null +++ b/commands/mod/whois.js @@ -0,0 +1,120 @@ +const Discord = require("discord.js") +const settings = require("../../src/settings") +const { EmbedBuilder, PermissionsBitField } = require("discord.js"); +const fs = require('fs') +const {upload_limit} = require("../../src/util") +const path = require('path') +let config_loc = __filename+".json" +let config = JSON.parse(fs.readFileSync(config_loc)) +module.exports = { + name: "whois", + command: ["whois","getuser","getrole"], + mod_only:true, + config:config, + config_loc:config_loc, + async main(client,Discord,message,args) { + if(args.length==0) + return message.reply("bad usage, try `sns help whois`") + await message.guild.members.fetch() + + let error = "" + let users_m = Object.fromEntries(message.mentions.users) + for(let k of Object.keys(users_m)){ + let user = message.guild.members.cache.get(users_m[k].id) + if(user==null) + error+=("user "+users_m[k].id+" not found\n") + else + this.p_user(client,Discord,message,user) + } + let roles_m = Object.fromEntries(message.mentions.roles) + for(let k of Object.keys(roles_m)){ + let role = message.guild.roles.cache.get(roles_m[k].id) + if(role==null) + error+=("role "+roles_m[k].id+" not found\n") + else + this.p_role(client,Discord,message,role) + } + for(let a of args){ + if(a[0]!='<'){ + let role = message.guild.roles.cache.get(a) + let user = message.guild.members.cache.get(a) + if(role!=null) + this.p_role(client,Discord,message,role) + else if(user!=null) + this.p_user(client,Discord,message,user) + else + error+=("user or role "+a+" not found\n") + } + } + if(error!="") + message.reply(error) + //this.p_user(client,Discord,message,user) + }, + s_options:[{type:"role",name:"role",desc:"roles to get info on",required:false,autocomplete:false}, + {type:"user",name:"user",desc:"users to get info on",required:false,autocomplete:false}], + async s_main(client,Discord,interaction){ + let role = interaction.options.getRole("role") + let user = interaction.options.getUser("user") + if(role==null&&user==null) + return interaction.reply({content:"select atleast one option",ephemeral: true}) + if(role!=null) + this.p_role(client,Discord,interaction,role) + if(user!=null){ + await interaction.guild.members.fetch() + user = interaction.guild.members.cache.get(user.id) + this.p_user(client,Discord,interaction,user) + } + }, + p_user(client,Discord,message,user){ + let join = new Date(parseInt(user.joinedTimestamp / 1000, 10)*1000).toLocaleDateString(undefined,{ weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); + let created = new Date(parseInt(user.user.createdAt / 1000, 10)*1000).toLocaleDateString(undefined,{ weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); + let mod = user.permissions!=null&&user.permissions?.has(PermissionsBitField.Flags.KickMembers) + let roles = "" + //console.log(message.mentions.users) + message.channel.send("loading ids").then(async(m)=>{ + await m.edit("<@!"+user.id+">") + m.delete() + }) + for(let r of user._roles) + roles+="<@&"+r+"> " + const embed = new EmbedBuilder() + .setAuthor({name:user.user.username,iconURL:user.displayAvatarURL()}) + .setThumbnail(user.displayAvatarURL()) + .setDescription("<@!"+user.id+">"+(mod?" +able to use mod commands":"")) + .addFields([{ name: 'Joined', value:join , inline: true }, + { name: 'Created', value:created , inline: true }, + { name: 'Roles ['+user._roles.length+']', value:roles }]) + .setFooter({text:"id:"+user.id}) + .setColor(settings.defaultColor) + message.reply({embeds:[embed]}) + }, + async p_role(client,Discord,message,role){ + let members = " " + //console.log(message.guild.members) + let members_m = Object.fromEntries(message.guild.roles.cache.get(role.id).members) + let members_a = [] + for(let k of Object.keys(members_m)){ + let new_m = "<@"+members_m[k].id+"> " + if((members+new_m).length>1024-3){ + members+="..." + break; + } + members+=new_m + } + if(members!=" "){ + message.channel.send("loading ids").then(async(m)=>{ + await m.edit(members) + m.delete() + }) + } + let mod = role.permissions!=null&&role.permissions?.has(PermissionsBitField.Flags.KickMembers) + const embed = new EmbedBuilder() + .setTitle(role.name) + .setDescription("<@&"+role.id+">"+(mod?" +able to use mod commands":"")) + .addFields([{ name: 'Mentionable', value:(role.mentionable?"true":"false"), inline: true }, + {name: 'Users ['+role.members.size+"]",value:members}]) + .setFooter({text:"id:"+role.id}) + .setColor(settings.defaultColor) + message.reply({embeds:[embed]}) + } +}; |