diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 0000000..8fb7e17 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,19 @@ +name: Deploy + +on: + push: + branches: ["canary"] + workflow_dispatch: + +jobs: + build: + runs-on: self-hosted + steps: + - uses: actions/checkout@v3 + - name: Build image + run: docker build -t ${{ github.repository }} . + - name: Deploy image + run: | + docker stop ${{ github.event.repository.name }} || true + docker rm ${{ github.event.repository.name }} || true + docker run -d -e "DISCORD_TOKEN=${{ secrets.DISCORD_TOKEN }}" -e "DATABASE_URL=${{ secrets.DATABASE_URL }}" --restart always --name ${{ github.event.repository.name }} ${{ github.repository }} diff --git a/.gitignore b/.gitignore index 8db8d77..fdda6d8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ /node_modules .env package-lock.json -/src/badges -/prisma \ No newline at end of file +/src/badges \ No newline at end of file diff --git a/index.js b/index.js index 5be9cd3..e82248d 100644 --- a/index.js +++ b/index.js @@ -54,12 +54,12 @@ cl.on("messageCreate", async (msg) => { //exp if (!msg.content.startsWith(cl.cfg.prefix)) { - client.messageCount(msg.author.id); + client.messageCount(msg.author.id, msg.channel.id); if (await redis.expCheck(msg.author.id, redisConnection)) { client.addExp(msg.author.id, 10, 25); } } else { - client.messageCount(msg.author.id); + //client.messageCount(msg.author.id); } const args = msg.content.slice(cl.cfg.prefix.length).trim().split(/ +/); diff --git a/package-lock.json b/package-lock.json index 2bbe470..b72f635 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,8 +15,8 @@ "daemon": "^1.1.0", "discord.js": "^13.6.0", "dotenv": "^10.0.0", - "nodemon": "^2.0.15", - "prisma": "^3.12.0", + "nodemon": "^2.0.16", + "prisma": "^3.13.0", "redis": "^4.0.4" }, "engines": { @@ -187,9 +187,9 @@ } }, "node_modules/@prisma/engines": { - "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", - "integrity": "sha512-zULjkN8yhzS7B3yeEz4aIym4E2w1ChrV12i14pht3ePFufvsAvBSoZ+tuXMvfSoNTgBS5E4bolRzLbMmbwkkMQ==", + "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", + "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==", "hasInstallScript": true }, "node_modules/@prisma/engines-version": { @@ -1355,9 +1355,9 @@ } }, "node_modules/nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", + "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "hasInstallScript": true, "dependencies": { "chokidar": "^3.5.2", @@ -1497,12 +1497,13 @@ } }, "node_modules/prisma": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.12.0.tgz", - "integrity": "sha512-ltCMZAx1i0i9xuPM692Srj8McC665h6E5RqJom999sjtVSccHSD8Z+HSdBN2183h9PJKvC5dapkn78dd0NWMBg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", + "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", "hasInstallScript": true, "dependencies": { - "@prisma/engines": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", + "ts-pattern": "^4.0.1" }, "bin": { "prisma": "build/index.js", @@ -1843,6 +1844,11 @@ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" }, + "node_modules/ts-pattern": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", + "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==" + }, "node_modules/tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", @@ -2150,9 +2156,9 @@ } }, "@prisma/engines": { - "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980.tgz", - "integrity": "sha512-zULjkN8yhzS7B3yeEz4aIym4E2w1ChrV12i14pht3ePFufvsAvBSoZ+tuXMvfSoNTgBS5E4bolRzLbMmbwkkMQ==" + "version": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b.tgz", + "integrity": "sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==" }, "@prisma/engines-version": { "version": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980", @@ -3016,9 +3022,9 @@ } }, "nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", + "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -3113,11 +3119,12 @@ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, "prisma": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.12.0.tgz", - "integrity": "sha512-ltCMZAx1i0i9xuPM692Srj8McC665h6E5RqJom999sjtVSccHSD8Z+HSdBN2183h9PJKvC5dapkn78dd0NWMBg==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-3.13.0.tgz", + "integrity": "sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==", "requires": { - "@prisma/engines": "3.12.0-37.22b822189f46ef0dc5c5b503368d1bee01213980" + "@prisma/engines": "3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b", + "ts-pattern": "^4.0.1" } }, "pstree.remy": { @@ -3374,6 +3381,11 @@ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.1.tgz", "integrity": "sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==" }, + "ts-pattern": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-4.0.2.tgz", + "integrity": "sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==" + }, "tslib": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", diff --git a/package.json b/package.json index c35c70e..84accba 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "daemon": "^1.1.0", "discord.js": "^13.6.0", "dotenv": "^10.0.0", - "nodemon": "^2.0.15", - "prisma": "^3.12.0", + "nodemon": "^2.0.16", + "prisma": "^3.13.0", "redis": "^4.0.4" } } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e8bf88f..f3544b3 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -11,6 +11,7 @@ model badges { badge_id Int @id badge_name String badge_description String + badge_visibility Boolean @default(true) badge_type Int @default(0) givenbadges givenbadges[] } @@ -27,10 +28,20 @@ model givenbadges { } model users { - user_id String @id(map: "user_pkey") - exp Int @default(0) - msg_count Int @default(0) - voice_time Int @default(0) - lvl Int @default(0) - givenbadges givenbadges[] + user_id String @id(map: "user_pkey") + exp Int @default(0) + voice_time Int @default(0) + lvl Int @default(0) + givenbadges givenbadges[] + sendmessages sendmessages[] +} + +model sendmessages { + id Int @id @default(autoincrement()) + user_id String + date DateTime @db.Date + channel String + msg_count Int + users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction, map: "user_id") + } diff --git a/src/cmds/profile.js b/src/cmds/profile.js index 8aba3ff..c48b819 100644 --- a/src/cmds/profile.js +++ b/src/cmds/profile.js @@ -1,5 +1,3 @@ -const { ReactionUserManager } = require("discord.js"); - module.exports = { name: "profile", async execute(cl, msg, args, connect) { diff --git a/src/functions/postgres.js b/src/functions/postgres.js index 4d12f0c..f97f775 100644 --- a/src/functions/postgres.js +++ b/src/functions/postgres.js @@ -26,17 +26,22 @@ class Postgres { }); } + async msg_state(userID) { + return await this.client.users.findUnique({ + where: { + user_id: userID, + }, + }); + } + async addExp(userID, min, max) { - await this.#ifExist(userID).then(async () => { + await this.#ifUserExist(userID).then(async () => { const rExp = randomExp(min, max); return await this.client.users.update({ where: { user_id: userID, }, data: { - msg_count: { - increment: 1, - }, exp: { increment: rExp, }, @@ -56,13 +61,28 @@ class Postgres { }); }); } - async #ifExist(userID) { - if ((await !this.profile(userID)) == null) { + + async #ifUserExist(userID) { + if ((await this.profile(userID)) == null) { + console.log("Account"); await this.client.users.create({ data: { user_id: userID, - msg_count: 0, lvl: 0, + exp: 0, + }, + }); + } + } + + async #ifMsgsExist(userID, channelID) { + if ((await this.profile(userID)) == null) { + console.log("Account"); + await this.client.users.create({ + data: { + user_id: userID, + lvl: 0, + exp: 0, }, }); }