-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdb.js
More file actions
153 lines (141 loc) · 4.42 KB
/
db.js
File metadata and controls
153 lines (141 loc) · 4.42 KB
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
146
147
148
149
150
151
152
153
// ES module version with dynamic import for sqlite3
let db = null;
async function initDB() {
const sqlite3Module = await import('sqlite3');
const sqlite3 = sqlite3Module.default || sqlite3Module;
const Database = sqlite3.verbose().Database;
db = new Database('db.sqlite');
//create table called players_follow with columns int discord_id, string map_name, and a unique index on conflict replace
return new Promise((resolve, reject) => {
db.run("CREATE TABLE IF NOT EXISTS players_follow (discord_id TEXT, map_name TEXT, UNIQUE(discord_id, map_name) ON CONFLICT REPLACE)", function (err) {
if (err) {
reject(err);
return;
}
resolve();
});
});
}
async function followMap(discord_id, map_name) {
return new Promise((resolve, reject) => {
db.run("INSERT INTO players_follow VALUES (?, ?)", [discord_id, map_name], function (err) {
if (err) {
reject(err);
return;
}
resolve();
});
});
}
async function unfollowMap(discord_id, map_name) {
return new Promise((resolve, reject) => {
db.run("DELETE FROM players_follow WHERE discord_id = ? AND map_name = ?", [discord_id, map_name], function (err) {
if (err) {
reject(err);
return;
}
resolve();
});
});
}
async function getFollowers(map_name) {//returns array of discord_ids
return new Promise((resolve, reject) => {
db.all("SELECT discord_id FROM players_follow WHERE map_name = ?", [map_name], function (err, rows) {
if (err) {
reject(err);
return;
}
resolve(rows);
});
});
}
async function getAllFollows() {//returns all rows from players_follow
return new Promise((resolve, reject) => {
db.all("SELECT * FROM players_follow", function (err, rows) {
if (err) {
reject(err);
return;
}
resolve(rows);
});
});
}
async function getUserFollows(discord_id) {//returns array of map_names
return new Promise((resolve, reject) => {
db.all("SELECT map_name FROM players_follow WHERE discord_id = ?", [discord_id], function (err, rows) {
if (err) {
reject(err);
return;
}
resolve(rows);
});
});
}
async function isFollowingMap(discord_id, map_name) {//returns true if user is following map
return new Promise((resolve, reject) => {
db.get("SELECT * FROM players_follow WHERE discord_id = ? AND map_name = ?", [discord_id, map_name], function (err, row) {
if (err) {
reject(err);
return;
}
resolve(row);
});
});
}
async function getUsersFollowingMap(map_name) {//returns array of discord_ids
return new Promise((resolve, reject) => {
db.all("SELECT discord_id FROM players_follow WHERE map_name = ?", [map_name], function (err, rows) {
if (err) {
reject(err);
return;
}
resolve(rows);
});
});
}
async function hasMap(map_name) {//returns true if map exists
return new Promise((resolve, reject) => {
db.get("SELECT * FROM players_follow WHERE map_name = ?", [map_name], function (err, row) {
if (err) {
reject(err);
return;
}
resolve(row);
});
});
}
async function unfollowAll(discord_id) {//unfollows all maps for user
return new Promise((resolve, reject) => {
db.run("DELETE FROM players_follow WHERE discord_id = ?", [discord_id], function (err) {
if (err) {
reject(err);
return;
}
resolve();
});
});
}
async function totalFollows() {//returns total number of follows
return new Promise((resolve, reject) => {
db.get("SELECT COUNT(*) AS total FROM players_follow", function (err, row) {
if (err) {
reject(err);
return;
}
resolve(row);
});
});
}
export {
initDB,
followMap,
unfollowMap,
getFollowers,
getAllFollows,
getUserFollows,
isFollowingMap,
getUsersFollowingMap,
hasMap,
unfollowAll,
totalFollows
};