-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
145 lines (134 loc) · 4.36 KB
/
index.js
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// import packages
require("dotenv").config();
const Discord = require("discord.js");
const { Client, MessageEmbed, Intents } = require("discord.js");
const { genEmbed } = require("./utility");
// database
require("./db");
const Server = require("./models/Server");
// initialize API
// const intents = new Intents([
// Intents.NON_PRIVILEGED, // include all non-privileged intents, would be better to specify which ones you actually need
// "GUILD_MEMBERS", // lets you request guild members (i.e. fixes the issue)
// ]);
// const client = new Discord.Client({ ws: { intents } });
const client = new Client();
client.login(process.env.DISCORD_API_KEY);
const PREFIX = "$";
client.on("ready", () => {
console.log("The bot is running");
});
// commands
const commands = [
require("./commands/bal"),
require("./commands/pay"),
require("./commands/flip"),
require("./commands/leaderboard"),
require("./commands/rankup"),
require("./commands/tier"),
require("./commands/gen"),
require("./commands/setstartingbalance"),
require("./commands/reset"),
require("./commands/settiercost.js"),
require("./commands/resetranks.js"),
];
function help(msg, bank) {
let results = commands
.filter((v) => bank == v.bankOnly)
.map((v) => {
return {
name: v.name + (v.bankOnly ? " (BANK ONLY)" : ""),
value: `${v.description}\nuse: ${PREFIX + v.usage}`,
};
});
genEmbed(msg.channel, "Ecobot Help Center", (embed) => {
embed.addFields(results);
embed.setDescription(
`Use **${PREFIX}help bank** to view commands exclusive to the **bank** rank.`
);
});
}
client.on("guildMemberAdd", async (member) => {
const serverId = member.guild.id;
let server = await Server.findOne({ id: serverId });
server.members.push({
name: member.user.username,
balance: server.startingBalance,
serverId: serverId,
id: member.id,
tier: 0,
});
server.markModified("members");
await server.save();
});
client.on("message", async (message) => {
if (message.author.bot) return;
if (!message.content.startsWith(PREFIX)) return;
const words = message.content.split(" ");
const command = words.shift().substring(PREFIX.length).toLowerCase();
if (command == "help") {
help(message, words[0] ? words[0].toLowerCase() == "bank" : false);
return;
}
if (!commands.some((v) => v.name == command)) {
genEmbed(message.channel, "Invalid Command", (embed) => {
embed.setDescription("Use **" + PREFIX + "help** for commands.");
});
return;
}
const serverId = message.guild.id;
let server = await Server.findOne({ id: serverId });
if (!server) {
server = await initializeServer(serverId, message);
}
const requestedCommand = commands.find((v) => v.name == command);
if (
requestedCommand.bankOnly &&
!message.member.roles.cache.find((r) => r.name === "bank")
) {
genEmbed(message.channel, "Bank Only", (embed) => {
embed.setDescription(
"Only members with the **bank** role may use this command."
);
});
return;
}
try {
await requestedCommand.func(message, message.author, server, words);
} catch (err) {
genEmbed(message.channel, "Error", (embed) => {
embed.setDescription(
"Ecobot has errored. Please check your command usage. Use **" +
PREFIX +
"help** for commands."
);
});
console.log(err);
}
});
function getServer(message) {}
async function initializeServer(serverId, message) {
genEmbed(message.channel, "Please wait", (embed) => {
embed.setDescription(
`Initializing Ecobot for ${message.guild.name}...`
);
});
let allMembers = await client.guilds.cache.get(serverId).members.fetch();
allMembers = allMembers.map((v) => {
return {
name: v.user.username,
balance: 0,
serverId: serverId,
id: v.id,
tier: 0,
};
});
const newServer = new Server({
members: allMembers,
id: serverId,
startingBalance: 0,
tierOneCost: 100,
});
await newServer.save();
return newServer;
}