diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index c27a80c..36aadf5 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,20 +1,24 @@ name: Docker Image CI on: + schedule: + - cron: "0 10 * * *" push: branches: - - main - - dev + - "**" + tags: + - "v*.*.*" + pull_request: + branches: + - "main" jobs: docker: runs-on: ubuntu-latest steps: - - - name: Checkout + - name: Checkout uses: actions/checkout@v3 - - - name: Docker meta + - name: Docker meta id: meta uses: docker/metadata-action@v4 with: @@ -30,20 +34,16 @@ jobs: type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=sha - - - name: Set up QEMU + - name: Set up QEMU uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - - name: Login to Docker Hub + - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push + - name: Build and push uses: docker/build-push-action@v3 with: push: ${{ github.event_name != 'pull_request' }} diff --git a/Dockerfile b/Dockerfile index 30469f4..26863df 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,4 +22,4 @@ COPY --from=builder /app/package*.json ./ COPY --from=builder /app/dist ./dist COPY --from=builder /app/prisma ./prisma -CMD [ "npm", "run", "start:migrate:prod" ] \ No newline at end of file +CMD [ "npm", "run", "start:migrate:prod" ] diff --git a/docker-compose.yml b/docker-compose.yml index d4ba18c..3abf3c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: "3.7" services: app: container_name: app - image: vermiumwastaken/xyter + image: zyner/xyter:main restart: unless-stopped env_file: - .env @@ -18,6 +18,7 @@ services: - PUID=1000 - PGID=1000 - TZ=Region/City + - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=database - MYSQL_USER=username - MYSQL_PASSWORD=password diff --git a/prisma/migrations/20221023164351_init/migration.sql b/prisma/migrations/20221023164351_init/migration.sql index aa2b00c..6c8b330 100644 --- a/prisma/migrations/20221023164351_init/migration.sql +++ b/prisma/migrations/20221023164351_init/migration.sql @@ -6,116 +6,153 @@ CREATE TABLE `Guild` ( `embedColorError` VARCHAR(191) NOT NULL DEFAULT '#bb2124', `embedFooterText` VARCHAR(191) NOT NULL DEFAULT 'https://github.com/ZynerOrg/xyter', `embedFooterIcon` VARCHAR(191) NOT NULL DEFAULT 'https://github.com/ZynerOrg.png', - `creditsEnabled` BOOLEAN NOT NULL DEFAULT false, + `creditsEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `creditsRate` INTEGER NOT NULL DEFAULT 1, `creditsTimeout` INTEGER NOT NULL DEFAULT 5, `creditsWorkRate` INTEGER NOT NULL DEFAULT 25, `creditsWorkTimeout` INTEGER NOT NULL DEFAULT 86400, `creditsMinimumLength` INTEGER NOT NULL DEFAULT 5, - `pointsEnabled` BOOLEAN NOT NULL DEFAULT false, + `pointsEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `pointsRate` INTEGER NOT NULL DEFAULT 1, `pointsTimeout` INTEGER NOT NULL DEFAULT 5, `pointsMinimumLength` INTEGER NOT NULL DEFAULT 5, - `reputationsEnabled` BOOLEAN NOT NULL DEFAULT false, - `countersEnabled` BOOLEAN NOT NULL DEFAULT false, + `reputationsEnabled` BOOLEAN NOT NULL DEFAULT FALSE, + `countersEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `apiCpggUrlIv` VARCHAR(191) NULL, `apiCpggUrlContent` VARCHAR(191) NULL, `apiCpggTokenIv` VARCHAR(191) NULL, `apiCpggTokenContent` VARCHAR(191) NULL, - `auditsEnabled` BOOLEAN NOT NULL DEFAULT false, + `auditsEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `auditsChannelId` VARCHAR(191) NULL, - `shopRolesEnabled` BOOLEAN NOT NULL DEFAULT false, + `shopRolesEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `shopRolesPricePerHour` INTEGER NOT NULL DEFAULT 5, - `welcomeEnabled` BOOLEAN NOT NULL DEFAULT false, + `welcomeEnabled` BOOLEAN NOT NULL DEFAULT FALSE, `welcomeJoinChannelId` VARCHAR(191) NULL, `welcomeJoinChannelMessage` VARCHAR(191) NULL, `welcomeLeaveChannelId` VARCHAR(191) NULL, `welcomeLeaveChannelMessage` VARCHAR(191) NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `Guild_id_key`(`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `Guild_id_key` (`id`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable + CREATE TABLE `User` ( `id` VARCHAR(191) NOT NULL, `reputationsEarned` INTEGER NOT NULL DEFAULT 0, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `User_id_key`(`id`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `User_id_key` (`id`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable + CREATE TABLE `GuildMember` ( `userId` VARCHAR(191) NOT NULL, `guildId` VARCHAR(191) NOT NULL, `creditsEarned` INTEGER NOT NULL DEFAULT 0, `pointsEarned` INTEGER NOT NULL DEFAULT 0, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `GuildMember_userId_guildId_key`(`userId`, `guildId`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `GuildMember_userId_guildId_key` (`userId`, `guildId`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable + CREATE TABLE `GuildCounter` ( `guildId` VARCHAR(191) NOT NULL, `channelId` VARCHAR(191) NOT NULL, `triggerWord` VARCHAR(191) NOT NULL, `count` INTEGER NOT NULL DEFAULT 0, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `GuildCounter_guildId_channelId_key`(`guildId`, `channelId`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `GuildCounter_guildId_channelId_key` (`guildId`, `channelId`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable + CREATE TABLE `Cooldown` ( `guildId` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `cooldown` INTEGER NOT NULL, `timeoutId` VARCHAR(191) NOT NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `Cooldown_guildId_userId_timeoutId_key`(`guildId`, `userId`, `timeoutId`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `Cooldown_guildId_userId_timeoutId_key` (`guildId`, `userId`, `timeoutId`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable + CREATE TABLE `GuildShopRoles` ( `guildId` VARCHAR(191) NOT NULL, `roleId` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `pricePerHour` INTEGER NOT NULL DEFAULT 5, - `lastPayed` DATETIME(3) NOT NULL, - `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), - `updatedAt` DATETIME(3) NOT NULL, - - UNIQUE INDEX `GuildShopRoles_guildId_userId_roleId_key`(`guildId`, `userId`, `roleId`) -) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + `lastPayed` DATETIME (3) NOT NULL, + `createdAt` DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + `updatedAt` DATETIME (3) NOT NULL, + UNIQUE INDEX `GuildShopRoles_guildId_userId_roleId_key` (`guildId`, `userId`, `roleId`)) +DEFAULT CHARACTER +SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey -ALTER TABLE `GuildMember` ADD CONSTRAINT `GuildMember_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildMember` + ADD CONSTRAINT `GuildMember_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `GuildMember` ADD CONSTRAINT `GuildMember_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildMember` + ADD CONSTRAINT `GuildMember_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `GuildCounter` ADD CONSTRAINT `GuildCounter_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildCounter` + ADD CONSTRAINT `GuildCounter_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `Cooldown` ADD CONSTRAINT `Cooldown_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `Cooldown` + ADD CONSTRAINT `Cooldown_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `Cooldown` ADD CONSTRAINT `Cooldown_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `Cooldown` + ADD CONSTRAINT `Cooldown_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `GuildShopRoles` ADD CONSTRAINT `GuildShopRoles_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildShopRoles` + ADD CONSTRAINT `GuildShopRoles_guildId_fkey` FOREIGN KEY (`guildId`) REFERENCES `Guild` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `GuildShopRoles` ADD CONSTRAINT `GuildShopRoles_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildShopRoles` + ADD CONSTRAINT `GuildShopRoles_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE RESTRICT ON + UPDATE + CASCADE; -- AddForeignKey -ALTER TABLE `GuildShopRoles` ADD CONSTRAINT `GuildShopRoles_userId_guildId_fkey` FOREIGN KEY (`userId`, `guildId`) REFERENCES `GuildMember`(`userId`, `guildId`) ON DELETE RESTRICT ON UPDATE CASCADE; + +ALTER TABLE `GuildShopRoles` + ADD CONSTRAINT `GuildShopRoles_userId_guildId_fkey` FOREIGN KEY (`userId`, `guildId`) REFERENCES `GuildMember` (`userId`, `guildId`) ON DELETE RESTRICT ON + UPDATE + CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml index e5a788a..9bee74d 100644 --- a/prisma/migrations/migration_lock.toml +++ b/prisma/migrations/migration_lock.toml @@ -1,3 +1,3 @@ # Please do not edit this file manually # It should be added in your version-control system (i.e. Git) -provider = "mysql" \ No newline at end of file +provider = "mysql" diff --git a/src/helpers/credits/index.ts b/src/helpers/credits/index.ts index 78afdcd..13bb6af 100644 --- a/src/helpers/credits/index.ts +++ b/src/helpers/credits/index.ts @@ -1,6 +1,7 @@ import { Guild, User } from "discord.js"; import prisma from "../../handlers/database"; +// Start an transaction between two users in a guild. export const transfer = async ( guild: Guild, from: User,