aboutsummaryrefslogtreecommitdiff
path: root/commands/mod/whois.js
blob: 6ffd8e6684f1327876c395246cb287f61f12139a (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
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()
        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 = 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]})
  }
};