-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
107 lines (89 loc) · 3.07 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
// 기본 설정
const Discord = require("discord.js");
const client = new Discord.Client();
const tokens = require("./tokens/tokens.js"); // 토큰 가져오기
var admin = require("firebase-admin");
var serviceAccount = tokens("firebase");
const errors = require("./errors.json");
//firebase 설정
admin.initializeApp({ // firebase 실행
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://serviqbot.firebaseio.com"
});
var db = admin.database(); // db
var ref = db.ref("servers/"); // db 위치
ref.once("value", function(data) {
console.log(data.val()); // db위치에서 json정보 가져오기
});
const prefix = "$";
client.on("ready", () => {
console.log(`Logged in as ${client.user.tag}!`);
client.user.setActivity("$help를 입력하세요!");
});
client.on("message", msg => {
if (msg.content.startsWith(prefix)) { //접두사로 시작한다면
console.log(msg.content);
msg.reply(runCommand(msg)); //답변
} else if (msg.content.startsWith("**<투표>** ")) {
msg.react("👍");
sleep(500).then(() => {
msg.react("👎");
});
}
});
function runCommand(msg){
let content = msg.content;
let splited = content.split(" ");
let guildID = msg.channel.guild.id;
const commands = {
"say": param => param,
"svote": function(param) {
ref.child(guildID).update({
voteChannel: param
});
ref.once("value", function(data) {
console.log("새로운 투표 채널 개설 됨. " + data.val()); // db위치에서 json정보 가져오기
});
return `:white_check_mark: 이제 이 서버의 투표 채널은 ${param}입니다.`;
},
"nvote": function(param) {
ref.once("value", function(data) {
try {
let voteChannel = data.val()[guildID].voteChannel.slice(2, -1);
client.channels.get(voteChannel).send("**<투표>** " + param);
return `:white_check_mark: 투표가 열렸습니다.`;
} catch (e) {
}
});
return errorPrint("NO_VOTE_CHANNEL");
},
"help": () => {return new Discord.RichEmbed()
.setTitle("명령어 도움말")
.addField(`${prefix}say <할 말>`, "<할 말>을 말합니다.")
.addField(`${prefix}svote <#채널명>`, "투표 채널을 <#채널명>으로 변경합니다.")
.addField(`${prefix}nvote <투표 내용>`, "설정된 투표 채널에 <투표 내용> 투표를 엽니다.");
}
};
try {
let param = splited.slice(1).join(" ");
if(commands.hasOwnProperty(splited[0].slice(1))) {
return commands[splited[0].slice(1)](param);
} else {
return errorPrint("COMMAND_ERROR");
}
} catch (e) {
return errorPrint("COMMAND_ERROR");
}
function errorPrint(errorCode) {
const errEmbed = new Discord.RichEmbed()
.setTitle(":warning: 오류!")
.setDescription(errors[errorCode])
.setColor("#ED0000")
.setAuthor(msg.author.tag, msg.author.displayAvatarURL);
return errEmbed;
}
}
client.login(tokens("discord"));
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds));
};