Compare commits

..

6 commits

Author SHA1 Message Date
6acc5a9a02 v3.2.3
All checks were successful
Deploy To Production / build (push) Successful in 7s
Deploy To Production / deploy (push) Successful in 15s
2024-10-18 18:09:26 +01:00
d75f7e650c 3.2.3 2024-10-18 18:09:19 +01:00
923348d809 Migrate to yarn
All checks were successful
Test / build (push) Successful in 9s
2024-10-18 18:07:42 +01:00
6f91134756 Add to registry
Some checks failed
Test / build (push) Failing after 3s
2024-10-18 18:04:49 +01:00
1acedfbd3d WIP: Start of implementing a link-only mode
Some checks failed
Test / build (push) Failing after 4s
2024-10-12 13:45:41 +01:00
4ed5beb42a Move to yarn 2024-10-12 13:04:44 +01:00
17 changed files with 4677 additions and 8838 deletions

View file

@ -7,7 +7,7 @@
# any secret values. # any secret values.
BOT_TOKEN= BOT_TOKEN=
BOT_VER=3.2.1 BOT_VER=3.2.3
BOT_AUTHOR=Vylpes BOT_AUTHOR=Vylpes
BOT_OWNERID=147392775707426816 BOT_OWNERID=147392775707426816
BOT_CLIENTID=682942374040961060 BOT_CLIENTID=682942374040961060

View file

@ -17,9 +17,9 @@ jobs:
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 18.x node-version: 18.x
- run: npm ci - run: yarn install --frozen-lockfile
- run: npm run build - run: yarn build
- run: npm test - run: yarn test
- name: "Copy files over to location" - name: "Copy files over to location"
run: cp -r . ${{ secrets.PROD_REPO_PATH }} run: cp -r . ${{ secrets.PROD_REPO_PATH }}
@ -63,5 +63,5 @@ jobs:
&& (pm2 delete vylbot_prod || true) \ && (pm2 delete vylbot_prod || true) \
&& docker compose up -d \ && docker compose up -d \
&& sleep 10 \ && sleep 10 \
&& npm run db:up \ && yarn db:up \
&& pm2 start --name vylbot_prod dist/vylbot.js && pm2 start --name vylbot_prod dist/vylbot.js

View file

@ -17,9 +17,9 @@ jobs:
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 18.x node-version: 18.x
- run: npm ci - run: yarn install --frozen-lockfile
- run: npm run build - run: yarn build
- run: npm test - run: yarn test
- name: "Copy files over to location" - name: "Copy files over to location"
run: cp -r . ${{ secrets.STAGE_REPO_PATH }} run: cp -r . ${{ secrets.STAGE_REPO_PATH }}
@ -63,5 +63,5 @@ jobs:
&& (pm2 delete vylbot_stage || true) \ && (pm2 delete vylbot_stage || true) \
&& docker compose up -d \ && docker compose up -d \
&& sleep 10 \ && sleep 10 \
&& npm run db:up \ && yarn db:up \
&& pm2 start --name vylbot_stage dist/vylbot.js && pm2 start --name vylbot_stage dist/vylbot.js

View file

@ -19,6 +19,6 @@ jobs:
uses: actions/setup-node@v1 uses: actions/setup-node@v1
with: with:
node-version: 18.x node-version: 18.x
- run: npm ci - run: yarn install --frozen-lockfile
- run: npm run build - run: yarn build
- run: npm test - run: yarn test

3
.gitignore vendored
View file

@ -105,4 +105,5 @@ dist
config.json config.json
.DS_Store .DS_Store
ormconfig.json ormconfig.json
.temp/

8815
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{ {
"name": "vylbot-app", "name": "vylbot-app",
"version": "3.2.2", "version": "3.2.3",
"description": "A discord bot made for Vylpes' Den", "description": "A discord bot made for Vylpes' Den",
"main": "./dist/vylbot", "main": "./dist/vylbot",
"typings": "./dist", "typings": "./dist",

View file

@ -1,4 +1,4 @@
import { CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import { CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder, TextChannel } from "discord.js";
import EmbedColours from "../../constants/EmbedColours"; import EmbedColours from "../../constants/EmbedColours";
import SettingsHelper from "../../helpers/SettingsHelper"; import SettingsHelper from "../../helpers/SettingsHelper";
import { Command } from "../../type/command"; import { Command } from "../../type/command";
@ -24,6 +24,8 @@ export default class Entry extends Command {
.setTitle("Welcome") .setTitle("Welcome")
.setDescription(`Welcome to the server! Please make sure to read the rules in the <#${rulesChannelId}> channel and type the code found there in here to proceed to the main part of the server.`); .setDescription(`Welcome to the server! Please make sure to read the rules in the <#${rulesChannelId}> channel and type the code found there in here to proceed to the main part of the server.`);
await interaction.channel.send({ embeds: [ embed ]}); const channel = interaction.channel as TextChannel;
await channel.send({ embeds: [ embed ]});
} }
} }

View file

@ -93,7 +93,7 @@ export default class Audits extends Command {
private async SendAuditForUser(interaction: CommandInteraction) { private async SendAuditForUser(interaction: CommandInteraction) {
if (!interaction.guildId) return; if (!interaction.guildId) return;
const user = interaction.options.getUser('target'); const user = interaction.options.get('target')?.user;
if (!user) { if (!user) {
await interaction.reply("User not found."); await interaction.reply("User not found.");
@ -191,7 +191,7 @@ export default class Audits extends Command {
private async AddAudit(interaction: CommandInteraction) { private async AddAudit(interaction: CommandInteraction) {
if (!interaction.guildId) return; if (!interaction.guildId) return;
const user = interaction.options.getUser('target'); const user = interaction.options.get('target')?.user;
const auditType = interaction.options.get('type'); const auditType = interaction.options.get('type');
const reasonInput = interaction.options.get('reason'); const reasonInput = interaction.options.get('reason');

View file

@ -1,4 +1,4 @@
import { CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import { CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder, TextChannel } from "discord.js";
import SettingsHelper from "../helpers/SettingsHelper"; import SettingsHelper from "../helpers/SettingsHelper";
import StringTools from "../helpers/StringTools"; import StringTools from "../helpers/StringTools";
import { Command } from "../type/command"; import { Command } from "../type/command";
@ -59,6 +59,8 @@ export default class Code extends Command {
.setTitle("Entry Code") .setTitle("Entry Code")
.setDescription(code); .setDescription(code);
await interaction.channel.send({ embeds: [ embed ]}); const channel = interaction.channel as TextChannel;
await channel.send({ embeds: [ embed ]});
} }
} }

30
src/commands/linkonly.ts Normal file
View file

@ -0,0 +1,30 @@
import { CommandInteraction, PermissionFlagsBits, SlashCommandBuilder } from "discord.js";
import { Command } from "../type/command";
import SettingsHelper from "../helpers/SettingsHelper";
export default class Linkonly extends Command {
constructor() {
super();
this.CommandBuilder = new SlashCommandBuilder()
.setName("linkonly")
.setDescription("Set the link only channel, leave blank to disable")
.setDefaultMemberPermissions(PermissionFlagsBits.ManageMessages)
.addChannelOption(x => x
.setName("channel")
.setDescription("The channel"));
}
public override async execute(interaction: CommandInteraction) {
if (!interaction.guild) return;
const channel = interaction.options.get("channel")?.channel;
const channelid = channel?.id ?? "";
const channelName = channel?.name ?? "<NONE>";
await SettingsHelper.SetSetting("channel.linkonly", interaction.guild.id, channelid);
await interaction.reply(`Set the link only channel to \`${channelName}\``);
}
}

View file

@ -1,4 +1,4 @@
import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder } from "discord.js"; import { ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder, PermissionsBitField, SlashCommandBuilder, TextChannel } from "discord.js";
import { existsSync, readFileSync } from "fs"; import { existsSync, readFileSync } from "fs";
import EmbedColours from "../constants/EmbedColours"; import EmbedColours from "../constants/EmbedColours";
import { Command } from "../type/command"; import { Command } from "../type/command";
@ -79,7 +79,7 @@ export default class Rules extends Command {
embeds.push(embed); embeds.push(embed);
}); });
const channel = interaction.channel; const channel = interaction.channel as TextChannel;
if (!channel) { if (!channel) {
await interaction.reply({ content: "Channel not found.", ephemeral: true }); await interaction.reply({ content: "Channel not found.", ephemeral: true });
@ -109,7 +109,9 @@ export default class Rules extends Command {
.setLabel(buttonLabel || "Verify") .setLabel(buttonLabel || "Verify")
]); ]);
await interaction.channel?.send({ const channel = interaction.channel as TextChannel;
await channel.send({
components: [ row ] components: [ row ]
}); });

View file

@ -44,6 +44,9 @@ export default class DefaultValues {
this.values.push({ Key: "verification.role", Value: "Entry" }); this.values.push({ Key: "verification.role", Value: "Entry" });
this.values.push({ Key: "verification.code", Value: "" }); this.values.push({ Key: "verification.code", Value: "" });
// Gif Only Mode
this.values.push({ Key: "channel.linkonly", Value: "" })
// Event // Event
this.values.push({ Key: "event.message.delete.enabled", Value: "false" }); this.values.push({ Key: "event.message.delete.enabled", Value: "false" });
this.values.push({ Key: "event.message.delete.channel", Value: "message-logs" }); this.values.push({ Key: "event.message.delete.channel", Value: "message-logs" });

View file

@ -2,6 +2,7 @@ import { Message } from "discord.js";
import SettingsHelper from "../../helpers/SettingsHelper"; import SettingsHelper from "../../helpers/SettingsHelper";
import VerificationCheck from "./MessageCreate/VerificationCheck"; import VerificationCheck from "./MessageCreate/VerificationCheck";
import CacheHelper from "../../helpers/CacheHelper"; import CacheHelper from "../../helpers/CacheHelper";
import LinkOnlyMode from "./MessageCreate/LinkOnlyMode";
export default async function MessageCreate(message: Message) { export default async function MessageCreate(message: Message) {
if (!message.guild) return; if (!message.guild) return;
@ -9,6 +10,8 @@ export default async function MessageCreate(message: Message) {
await CacheHelper.UpdateServerCache(message.guild); await CacheHelper.UpdateServerCache(message.guild);
await LinkOnlyMode(message);
const isVerificationEnabled = await SettingsHelper.GetSetting("verification.enabled", message.guild.id); const isVerificationEnabled = await SettingsHelper.GetSetting("verification.enabled", message.guild.id);
if (isVerificationEnabled && isVerificationEnabled.toLocaleLowerCase() == "true") { if (isVerificationEnabled && isVerificationEnabled.toLocaleLowerCase() == "true") {

View file

@ -0,0 +1,20 @@
import { Message } from "discord.js";
import SettingsHelper from "../../../helpers/SettingsHelper";
export default async function LinkOnlyMode(message: Message) {
if (!message.guild) return;
const gifOnlyMode = await SettingsHelper.GetSetting("channel.linkonly", message.guild.id);
if (!gifOnlyMode) return;
const channel = message.guild.channels.cache.find(x => x.id == gifOnlyMode) || message.guild.channels.fetch(gifOnlyMode);
if (!channel) return;
if (message.content.startsWith("https://") || message.content.startsWith("http://")) return;
if (!message.deletable) return;
await message.delete();
}

View file

@ -12,6 +12,7 @@ import Config from "./commands/config";
import Disable from "./commands/disable"; import Disable from "./commands/disable";
import Ignore from "./commands/ignore"; import Ignore from "./commands/ignore";
import Kick from "./commands/kick"; import Kick from "./commands/kick";
import Linkonly from "./commands/linkonly";
import Mute from "./commands/mute"; import Mute from "./commands/mute";
import Poll from "./commands/poll"; import Poll from "./commands/poll";
import Role from "./commands/Role/role"; import Role from "./commands/Role/role";
@ -52,6 +53,7 @@ export default class Registry {
CoreClient.RegisterCommand("disable", new Disable()); CoreClient.RegisterCommand("disable", new Disable());
CoreClient.RegisterCommand("ignore", new Ignore()); CoreClient.RegisterCommand("ignore", new Ignore());
CoreClient.RegisterCommand("kick", new Kick()); CoreClient.RegisterCommand("kick", new Kick());
CoreClient.RegisterCommand("linkonly", new Linkonly());
CoreClient.RegisterCommand("mute", new Mute()); CoreClient.RegisterCommand("mute", new Mute());
CoreClient.RegisterCommand("poll", new Poll()); CoreClient.RegisterCommand("poll", new Poll());
CoreClient.RegisterCommand("rules", new Rules()); CoreClient.RegisterCommand("rules", new Rules());

4589
yarn.lock Normal file

File diff suppressed because it is too large Load diff