aboutsummaryrefslogtreecommitdiff
path: root/commands/mod/whois.js
blob: 48f3fdf651bfc737730dabd0ceef71b5ebcd9c8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
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")
let util = 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()
        let _user = user
        user = interaction.guild.members.cache.get(user.id)
        if(!user){
            return interaction.reply({content:"<@"+_user.id+"> not found (have they left?)",ephemeral: true})
        }
        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 = util.is_mod(user)
    let roles = ""
    let color = {pos:-1,color:settings.defaultColor};

    message.channel.send("loading ids").then(async(m)=>{
        await m.edit("<@!"+user.id+">")
        m.delete()
    })
    for(let r in user._roles){
        let role = message.guild.roles.cache.get(user._roles[r])
        if(role.color!=0&&role.rawPosition>color.pos)
            color={pos:role.rawPosition,color:role.color}
        roles+="<@&"+user._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(color.color)
    message.reply({embeds:[embed]})
  },
  async p_role(client,Discord,message,role){
    let 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 = util.is_mod(role)
    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(role.color)
    message.reply({embeds:[embed]})
  }
};