Skip to content

Commit 372e322

Browse files
author
gprando
committed
feat: add base ranking bot 🔥
1 parent 4264409 commit 372e322

File tree

6 files changed

+182
-2
lines changed

6 files changed

+182
-2
lines changed

.env.example

+4
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
TOKEN=your_token_here
22
PREFIX=!
3+
4+
REDIS_HOST=leaderboard-bot
5+
REDIS_PORT=6379
6+
REDIS_PASSWORD=redis123

docker-compose.yml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
version: '3'
2+
3+
services:
4+
ranking-bot:
5+
build: .
6+
container_name: ranking-bot
7+
volumes:
8+
- .:/home/bot
9+
- /home/bot/node_modules
10+
depends_on:
11+
- bot-ranking
12+
networks:
13+
- ranking-network
14+
bot-ranking:
15+
image: bitnami/redis:latest
16+
container_name: bot-ranking
17+
environment:
18+
- ALLOW_EMPTY_PASSWORD=no
19+
- REDIS_PASSWORD=${REDIS_PASSWORD}
20+
volumes:
21+
- bot-ranking-data:/data
22+
networks:
23+
- ranking-network
24+
25+
volumes:
26+
bot-ranking-data:
27+
28+
networks:
29+
ranking-network:
30+
driver: bridge

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@
1414
"dependencies": {
1515
"axios": "^0.20.0",
1616
"discord.js": "^12.3.1",
17-
"dotenv": "^8.2.0"
17+
"dotenv": "^8.2.0",
18+
"ioredis": "^4.17.3"
1819
},
1920
"devDependencies": {
2021
"@types/dotenv": "^8.2.0",
22+
"@types/ioredis": "^4.17.4",
2123
"@types/node": "^14.11.2",
2224
"@typescript-eslint/eslint-plugin": "^4.1.1",
2325
"@typescript-eslint/parser": "^4.1.1",

src/Ranking/index.ts

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Redis, { Redis as RedisClient } from 'ioredis';
2+
import RedisConfig from '../config/redis';
3+
4+
export default class Ranking {
5+
private client: RedisClient;
6+
7+
constructor() {
8+
this.client = new Redis(RedisConfig.config.redis);
9+
}
10+
11+
public async setScore(user_id: string): Promise<number> {
12+
const oldScore = await this.client.get(user_id);
13+
14+
if (!oldScore) {
15+
await this.client.set(user_id, 1);
16+
return 1;
17+
}
18+
19+
await this.client.del(user_id);
20+
21+
const newScore = Number(oldScore) + 1;
22+
23+
await this.client.set(user_id, newScore);
24+
25+
return newScore;
26+
}
27+
}

src/config/redis.ts

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { RedisOptions } from 'ioredis';
2+
3+
interface IRedisConfig {
4+
driver: 'redis';
5+
6+
config: {
7+
redis: RedisOptions;
8+
};
9+
}
10+
11+
export default {
12+
driver: 'redis',
13+
14+
config: {
15+
redis: {
16+
host: process.env.REDIS_HOST,
17+
port: process.env.REDIS_PORT,
18+
password: process.env.REDIS_PASSWORD || undefined,
19+
},
20+
},
21+
} as IRedisConfig;

yarn.lock

+97-1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@
5858
"@nodelib/fs.scandir" "2.1.3"
5959
fastq "^1.6.0"
6060

61+
"@types/bluebird@^3.5.32":
62+
version "3.5.32"
63+
resolved "https://registry.yarnpkg.com/@types/bluebird/-/bluebird-3.5.32.tgz#381e7b59e39f010d20bbf7e044e48f5caf1ab620"
64+
integrity sha512-dIOxFfI0C+jz89g6lQ+TqhGgPQ0MxSnh/E4xuC0blhFtyW269+mPG5QeLgbdwst/LvdP8o1y0o/Gz5EHXLec/g==
65+
6166
"@types/color-name@^1.1.1":
6267
version "1.1.1"
6368
resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0"
@@ -70,6 +75,13 @@
7075
dependencies:
7176
dotenv "*"
7277

78+
"@types/ioredis@^4.17.4":
79+
version "4.17.4"
80+
resolved "https://registry.yarnpkg.com/@types/ioredis/-/ioredis-4.17.4.tgz#e4c2d8d51ecb1f4752b660f8e19b88b1c5329b2e"
81+
integrity sha512-kb5+thmQJ7HHyOAnCOeqRJlF2fyvadHghnLLLKZzCNyShStJeIQtNGGDjA30gWqj6UFSDAWBfGEMKrFDrGfvzQ==
82+
dependencies:
83+
"@types/node" "*"
84+
7385
"@types/json-schema@^7.0.3":
7486
version "7.0.6"
7587
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
@@ -80,11 +92,18 @@
8092
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
8193
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
8294

83-
"@types/node@^14.11.2":
95+
"@types/node@*", "@types/node@^14.11.2":
8496
version "14.11.2"
8597
resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256"
8698
integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA==
8799

100+
"@types/redis@^2.8.27":
101+
version "2.8.27"
102+
resolved "https://registry.yarnpkg.com/@types/redis/-/redis-2.8.27.tgz#9bc89b472f3fc4a57a06c1823f2fc860c6c2fdf3"
103+
integrity sha512-RRHarqPp3mgqHz+qzLVuQCJAIVaB3JBaczoj24QVVYu08wiCmB8vbOeNeK9lIH+pyT7+R/bbEPghAZZuhbZm0g==
104+
dependencies:
105+
"@types/node" "*"
106+
88107
"@types/strip-bom@^3.0.0":
89108
version "3.0.0"
90109
resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2"
@@ -298,6 +317,11 @@ binary-extensions@^2.0.0:
298317
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9"
299318
integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==
300319

320+
bluebird@^3.7.2:
321+
version "3.7.2"
322+
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
323+
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
324+
301325
brace-expansion@^1.1.7:
302326
version "1.1.11"
303327
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -385,6 +409,11 @@ cli-width@^3.0.0:
385409
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
386410
integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
387411

412+
cluster-key-slot@^1.1.0:
413+
version "1.1.0"
414+
resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz#30474b2a981fb12172695833052bc0d01336d10d"
415+
integrity sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==
416+
388417
color-convert@^1.9.0:
389418
version "1.9.3"
390419
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
@@ -493,6 +522,11 @@ delayed-stream@~1.0.0:
493522
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
494523
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
495524

525+
denque@^1.1.0, denque@^1.4.1:
526+
version "1.4.1"
527+
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
528+
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
529+
496530
diff@^4.0.1:
497531
version "4.0.2"
498532
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
@@ -1076,6 +1110,21 @@ inquirer@^7.0.0:
10761110
strip-ansi "^6.0.0"
10771111
through "^2.3.6"
10781112

1113+
ioredis@^4.17.3:
1114+
version "4.17.3"
1115+
resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.17.3.tgz#9938c60e4ca685f75326337177bdc2e73ae9c9dc"
1116+
integrity sha512-iRvq4BOYzNFkDnSyhx7cmJNOi1x/HWYe+A4VXHBu4qpwJaGT1Mp+D2bVGJntH9K/Z/GeOM/Nprb8gB3bmitz1Q==
1117+
dependencies:
1118+
cluster-key-slot "^1.1.0"
1119+
debug "^4.1.1"
1120+
denque "^1.1.0"
1121+
lodash.defaults "^4.2.0"
1122+
lodash.flatten "^4.4.0"
1123+
redis-commands "1.5.0"
1124+
redis-errors "^1.2.0"
1125+
redis-parser "^3.0.0"
1126+
standard-as-callback "^2.0.1"
1127+
10791128
is-arrayish@^0.2.1:
10801129
version "0.2.1"
10811130
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -1236,6 +1285,16 @@ locate-path@^2.0.0:
12361285
p-locate "^2.0.0"
12371286
path-exists "^3.0.0"
12381287

1288+
lodash.defaults@^4.2.0:
1289+
version "4.2.0"
1290+
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
1291+
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
1292+
1293+
lodash.flatten@^4.4.0:
1294+
version "4.4.0"
1295+
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
1296+
integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
1297+
12391298
lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19:
12401299
version "4.17.20"
12411300
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
@@ -1640,6 +1699,38 @@ redent@^1.0.0:
16401699
indent-string "^2.1.0"
16411700
strip-indent "^1.0.1"
16421701

1702+
1703+
version "1.5.0"
1704+
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.5.0.tgz#80d2e20698fe688f227127ff9e5164a7dd17e785"
1705+
integrity sha512-6KxamqpZ468MeQC3bkWmCB1fp56XL64D4Kf0zJSwDZbVLLm7KFkoIcHrgRvQ+sk8dnhySs7+yBg94yIkAK7aJg==
1706+
1707+
redis-commands@^1.5.0:
1708+
version "1.6.0"
1709+
resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.6.0.tgz#36d4ca42ae9ed29815cdb30ad9f97982eba1ce23"
1710+
integrity sha512-2jnZ0IkjZxvguITjFTrGiLyzQZcTvaw8DAaCXxZq/dsHXz7KfMQ3OUJy7Tz9vnRtZRVz6VRCPDvruvU8Ts44wQ==
1711+
1712+
redis-errors@^1.0.0, redis-errors@^1.2.0:
1713+
version "1.2.0"
1714+
resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
1715+
integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=
1716+
1717+
redis-parser@^3.0.0:
1718+
version "3.0.0"
1719+
resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
1720+
integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=
1721+
dependencies:
1722+
redis-errors "^1.0.0"
1723+
1724+
redis@^3.0.2:
1725+
version "3.0.2"
1726+
resolved "https://registry.yarnpkg.com/redis/-/redis-3.0.2.tgz#bd47067b8a4a3e6a2e556e57f71cc82c7360150a"
1727+
integrity sha512-PNhLCrjU6vKVuMOyFu7oSP296mwBkcE6lrAjruBYG5LgdSqtRBoVQIylrMyVZD/lkF24RSNNatzvYag6HRBHjQ==
1728+
dependencies:
1729+
denque "^1.4.1"
1730+
redis-commands "^1.5.0"
1731+
redis-errors "^1.2.0"
1732+
redis-parser "^3.0.0"
1733+
16431734
regexpp@^2.0.1:
16441735
version "2.0.1"
16451736
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
@@ -1813,6 +1904,11 @@ sprintf-js@~1.0.2:
18131904
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
18141905
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
18151906

1907+
standard-as-callback@^2.0.1:
1908+
version "2.0.1"
1909+
resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-2.0.1.tgz#ed8bb25648e15831759b6023bdb87e6b60b38126"
1910+
integrity sha512-NQOxSeB8gOI5WjSaxjBgog2QFw55FV8TkS6Y07BiB3VJ8xNTvUYm0wl0s8ObgQ5NhdpnNfigMIKjgPESzgr4tg==
1911+
18161912
string-width@^3.0.0:
18171913
version "3.1.0"
18181914
resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"

0 commit comments

Comments
 (0)