generated from lucxjo/template
(#8) Removed all node stuff. Init Cargo
Signed-off-by: Louis Hollingworth <louis@hollingworth.nl>
This commit is contained in:
parent
718d4f5e9c
commit
dcd94db325
|
@ -1,65 +0,0 @@
|
|||
name: prisma-migrate
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
install:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: https://github.com/actions/checkout@v2
|
||||
- name: Setup Nodejs
|
||||
uses: https://github.com/actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16.x
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
- name: Rerun Install
|
||||
run: yarn install
|
||||
|
||||
generate:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: install
|
||||
|
||||
steps:
|
||||
- uses: https://github.com/actions/checkout@v2
|
||||
|
||||
- name: Setup Nodejs
|
||||
uses: https://github.com/actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16.x
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
|
||||
- run: rm -rf node_modules/.prisma
|
||||
|
||||
- name: Generate Prisma Client
|
||||
run: npx prisma generate
|
||||
|
||||
migrate:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: install
|
||||
|
||||
steps:
|
||||
- uses: https://github.com/actions/checkout@v2
|
||||
|
||||
- name: Setup Nodejs
|
||||
uses: https://github.com/actions/setup-node@v2
|
||||
with:
|
||||
node-version: 16.x
|
||||
|
||||
- name: Install
|
||||
run: yarn install
|
||||
|
||||
- run: rm -rf node_modules/.prisma
|
||||
|
||||
- name: Deploy Migrations
|
||||
run: npx prisma migrate deploy
|
||||
env:
|
||||
DATABASE_URL: ${{ secrets.PROD_DATABASE_URL }}
|
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,3 +1,8 @@
|
|||
.env
|
||||
node_modules
|
||||
.DS_Store
|
||||
|
||||
|
||||
# Added by cargo
|
||||
|
||||
/target
|
||||
|
|
8
Cargo.toml
Normal file
8
Cargo.toml
Normal file
|
@ -0,0 +1,8 @@
|
|||
[package]
|
||||
name = "er"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
35
package.json
35
package.json
|
@ -1,35 +0,0 @@
|
|||
{
|
||||
"name": "er",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"main": "build/main.js",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"build:changelog": "npx @discordx/changelog --src src",
|
||||
"dev": "node --loader ts-node/esm src/main.ts",
|
||||
"start": "node build/main.js",
|
||||
"db:deploy": "prisma migrate deploy",
|
||||
"watch": "nodemon --exec ts-node-esm src/main.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@discordx/importer": "^1.2.3",
|
||||
"@prisma/client": "5.2.0",
|
||||
"discord.js": "^14.13.0",
|
||||
"discordx": "^11.7.6",
|
||||
"dotenv": "16.3.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^20.6.0",
|
||||
"nodemon": "^3.0.1",
|
||||
"prettier": "^3.0.3",
|
||||
"prisma": "^5.2.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "5.2.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=16.0.0",
|
||||
"npm": ">=7.0.0"
|
||||
}
|
||||
}
|
1239
pnpm-lock.yaml
1239
pnpm-lock.yaml
File diff suppressed because it is too large
Load diff
|
@ -1,166 +0,0 @@
|
|||
import {
|
||||
ApplicationCommandOptionType,
|
||||
Channel,
|
||||
CommandInteraction,
|
||||
GuildMember,
|
||||
PermissionsBitField,
|
||||
Role,
|
||||
} from "discord.js";
|
||||
import { Discord, Slash, SlashGroup, SlashOption } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
@SlashGroup({ name: "admin", description: "Admin commands" })
|
||||
@SlashGroup("admin")
|
||||
export class AdminCmds {
|
||||
@Slash({
|
||||
description: "Set or get the configured channel for reports",
|
||||
defaultMemberPermissions: PermissionsBitField.Flags.Administrator,
|
||||
})
|
||||
async reports(
|
||||
@SlashOption({
|
||||
description: "Set where the reports should be sent",
|
||||
name: "reports_channel",
|
||||
required: false,
|
||||
type: ApplicationCommandOptionType.Channel,
|
||||
})
|
||||
channel: Channel,
|
||||
interaction: CommandInteraction
|
||||
) {
|
||||
if (channel) {
|
||||
await prisma.guild
|
||||
.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId!,
|
||||
},
|
||||
})
|
||||
.then(async (data) => {
|
||||
if (data) {
|
||||
await prisma.guild.update({
|
||||
where: {
|
||||
id: data.id,
|
||||
},
|
||||
data: {
|
||||
reports_channel_id: channel.id,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await prisma.guild.create({
|
||||
data: {
|
||||
id: interaction.guildId!,
|
||||
name: interaction.guild!.name,
|
||||
reports_channel_id: channel.id,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
interaction.reply(
|
||||
`<#${channel.id}> is now setup to receive reports.`
|
||||
);
|
||||
});
|
||||
} else {
|
||||
await prisma.guild
|
||||
.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId!,
|
||||
},
|
||||
})
|
||||
.then((data) => {
|
||||
if (data) {
|
||||
interaction.reply(
|
||||
`<#${data.reports_channel_id}> is currently receiving reports for this guild.`
|
||||
);
|
||||
} else {
|
||||
interaction.reply("Reports are currently disabled for this guild");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Slash({
|
||||
description: "Link a user to their booster role",
|
||||
name: "link_role",
|
||||
defaultMemberPermissions: PermissionsBitField.Flags.ManageRoles,
|
||||
})
|
||||
async link_role(
|
||||
@SlashOption({
|
||||
description: "The user account to link",
|
||||
name: "member",
|
||||
required: true,
|
||||
type: ApplicationCommandOptionType.User,
|
||||
})
|
||||
member: GuildMember,
|
||||
@SlashOption({
|
||||
description: "The role to link",
|
||||
name: "role",
|
||||
required: true,
|
||||
type: ApplicationCommandOptionType.Role,
|
||||
})
|
||||
role: Role,
|
||||
interaction: CommandInteraction
|
||||
) {
|
||||
let mem = await prisma.member.findUnique({
|
||||
where: {
|
||||
dgid_duid: {
|
||||
duid: member.id,
|
||||
dgid: member.guild.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (mem) {
|
||||
await prisma.member.update({
|
||||
where: {
|
||||
id: mem.id,
|
||||
},
|
||||
data: {
|
||||
booster_role_id: role.id,
|
||||
name: member.displayName,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await prisma.member.create({
|
||||
data: {
|
||||
duid: member.id,
|
||||
dgid: interaction.guildId!,
|
||||
name: member.displayName,
|
||||
booster_role_id: role.id,
|
||||
},
|
||||
});
|
||||
}
|
||||
interaction.reply({
|
||||
content: "Member booster role updated!",
|
||||
ephemeral: true,
|
||||
});
|
||||
}
|
||||
|
||||
@Slash({
|
||||
description: "Enable or disable auto perk roles",
|
||||
defaultMemberPermissions: PermissionsBitField.Flags.Administrator,
|
||||
})
|
||||
async toggle_perk_role_creation(interaction: CommandInteraction) {
|
||||
if (interaction.guildId) {
|
||||
const g = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId,
|
||||
},
|
||||
});
|
||||
|
||||
await prisma.guild.update({
|
||||
where: {
|
||||
id: interaction.guildId,
|
||||
},
|
||||
data: {
|
||||
auto_create_booster_roles: !g?.auto_create_booster_roles,
|
||||
},
|
||||
});
|
||||
|
||||
interaction.reply({
|
||||
content: `Booster role creation is now ${
|
||||
g?.auto_create_booster_roles ? "disabled" : "enabled"
|
||||
}`,
|
||||
ephemeral: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
import {
|
||||
ApplicationCommandOptionType,
|
||||
Channel,
|
||||
CommandInteraction,
|
||||
} from "discord.js";
|
||||
import { Discord, Slash, SlashGroup, SlashOption } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
@SlashGroup({ description: "Manage your booster perks", name: "perks" })
|
||||
@SlashGroup("perks")
|
||||
export class Perks {
|
||||
@Slash({ description: "Manage your role" })
|
||||
async role(
|
||||
interaction: CommandInteraction,
|
||||
@SlashOption({
|
||||
name: "name",
|
||||
description: "Change the name of your role",
|
||||
type: ApplicationCommandOptionType.String,
|
||||
})
|
||||
name?: string,
|
||||
@SlashOption({
|
||||
name: "colour",
|
||||
description: "Change the colour of your role (in hex)",
|
||||
type: ApplicationCommandOptionType.String,
|
||||
})
|
||||
colour?: string
|
||||
) {
|
||||
const m = await prisma.member.findUnique({
|
||||
where: {
|
||||
dgid_duid: {
|
||||
dgid: interaction.guildId!,
|
||||
duid: interaction.user.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (!m || !m.booster_role_id) {
|
||||
interaction.reply({
|
||||
content:
|
||||
"It appears that you may not be a booster of this guild, contact <@207603534789738496> if you think this is a mistake.",
|
||||
ephemeral: true,
|
||||
});
|
||||
} else {
|
||||
const r = await interaction.guild?.roles.fetch(m.booster_role_id);
|
||||
if (r) {
|
||||
await interaction.guild?.roles.edit(r, {
|
||||
name: name ?? undefined,
|
||||
color:
|
||||
colour != undefined
|
||||
? colour.startsWith("#")
|
||||
? parseInt(colour.replace("#", "0x"), 16)
|
||||
: parseInt(`0x${colour}`)
|
||||
: undefined,
|
||||
});
|
||||
interaction.reply({
|
||||
content: "Role updated!",
|
||||
ephemeral: true,
|
||||
});
|
||||
} else {
|
||||
interaction.reply({
|
||||
content:
|
||||
"It appears that you may not be a booster of this guild, contact <@207603534789738496> if you think this is a mistake.",
|
||||
ephemeral: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,55 +0,0 @@
|
|||
import {
|
||||
ApplicationCommandOptionType,
|
||||
Client,
|
||||
CommandInteraction,
|
||||
GuildMember,
|
||||
TextChannel,
|
||||
User,
|
||||
} from "discord.js";
|
||||
import { Discord, Slash, SlashOption } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
export class Report {
|
||||
@Slash({ description: "Report a user to the guild staff", name: "report" })
|
||||
async report(
|
||||
@SlashOption({
|
||||
required: true,
|
||||
description: "The user to report",
|
||||
name: "user",
|
||||
type: ApplicationCommandOptionType.User,
|
||||
})
|
||||
user: GuildMember | User,
|
||||
@SlashOption({
|
||||
required: true,
|
||||
description: "Why you are reporting this user",
|
||||
name: "reason",
|
||||
type: ApplicationCommandOptionType.String,
|
||||
})
|
||||
reason: string,
|
||||
interaction: CommandInteraction,
|
||||
client: Client
|
||||
) {
|
||||
if (interaction.guild) {
|
||||
const guild = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: interaction.guild.id,
|
||||
},
|
||||
});
|
||||
if (guild && guild.reports_channel_id) {
|
||||
await client.channels
|
||||
.fetch(guild!.reports_channel_id!)
|
||||
.then((channel) => {
|
||||
if (channel!.isTextBased()) {
|
||||
const ct = channel as TextChannel;
|
||||
|
||||
ct.send(`${interaction.user} reported ${user} for: ${reason}`);
|
||||
}
|
||||
});
|
||||
}
|
||||
await interaction.reply({ content: "Report sent!", ephemeral: true });
|
||||
return;
|
||||
}
|
||||
await interaction.reply("You need to be in a guild to use this command");
|
||||
}
|
||||
}
|
|
@ -1,35 +0,0 @@
|
|||
import { CommandInteraction } from "discord.js";
|
||||
import { Discord, Slash } from "discordx";
|
||||
|
||||
@Discord()
|
||||
export class Threads {
|
||||
@Slash({ description: "Display current threads", name: "threads" })
|
||||
async threads(interaction: CommandInteraction) {
|
||||
if (interaction.guild) {
|
||||
const threads = await fetch(
|
||||
`https://discord.com/api/v10/guilds/${interaction.guildId}/threads/active`,
|
||||
{
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
Authorization: `Bot ${process.env.DISCORD_TOKEN}`,
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const body = (await threads.json()).threads as Array<{
|
||||
flags: number;
|
||||
guild_id: string;
|
||||
id: string;
|
||||
parent_id: string;
|
||||
}>;
|
||||
|
||||
let threadMsg = "The current active threads are:";
|
||||
|
||||
body.forEach((thread) => {
|
||||
threadMsg += `\n- <#${thread.id}>`;
|
||||
});
|
||||
|
||||
interaction.reply({ content: threadMsg, ephemeral: true });
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,15 +0,0 @@
|
|||
import { ArgsOf, Discord, On } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
export class GuildJoin {
|
||||
@On({ event: "guildCreate" })
|
||||
fn([guild]: ArgsOf<"guildCreate">) {
|
||||
prisma.guild.create({
|
||||
data: {
|
||||
id: guild.id,
|
||||
name: guild.name,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
import { ArgsOf, Discord, On } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
export class MemberEvent {
|
||||
@On({ event: "guildMemberAdd" })
|
||||
async memberJoin([member]: ArgsOf<"guildMemberAdd">) {
|
||||
await prisma.member.create({
|
||||
data: {
|
||||
dgid: member.guild.id,
|
||||
duid: member.id,
|
||||
name: member.displayName,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@On({ event: "guildMemberRemove" })
|
||||
async memberRemove([member]: ArgsOf<"guildMemberRemove">) {
|
||||
await prisma.member.delete({
|
||||
where: {
|
||||
dgid_duid: {
|
||||
duid: member.id,
|
||||
dgid: member.guild.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@On({ event: "guildMemberUpdate" })
|
||||
async memberUpdate([oldM, newM]: ArgsOf<"guildMemberUpdate">) {
|
||||
const g = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: newM.guild.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (g?.auto_create_booster_roles) {
|
||||
if (oldM.premiumSince !== newM.premiumSince) {
|
||||
if (newM != null) {
|
||||
const m = await prisma.member.findUnique({
|
||||
where: {
|
||||
dgid_duid: {
|
||||
dgid: newM.guild.id,
|
||||
duid: newM.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (m?.booster_role_id != null && newM.premiumSince != null) {
|
||||
return;
|
||||
} else if (newM.premiumSince == null) {
|
||||
await prisma.member.update({
|
||||
where: {
|
||||
id: m?.id,
|
||||
},
|
||||
data: {
|
||||
booster_role_id: null,
|
||||
},
|
||||
});
|
||||
const r = await newM.guild.roles.fetch(m!.booster_role_id!);
|
||||
if (r) await newM.guild.roles.delete(r);
|
||||
return;
|
||||
} else {
|
||||
const guild = newM.guild;
|
||||
|
||||
const role = await guild.roles.create({
|
||||
name: newM.nickname ?? newM.displayName,
|
||||
reason: `${newM.nickname ?? newM.displayName} just boosted!`,
|
||||
});
|
||||
|
||||
await newM.roles.add(role);
|
||||
|
||||
const m = await prisma.member.findUnique({
|
||||
where: {
|
||||
dgid_duid: {
|
||||
dgid: guild.id,
|
||||
duid: newM.id,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (m) {
|
||||
await prisma.member.update({
|
||||
where: {
|
||||
id: m.id,
|
||||
},
|
||||
data: {
|
||||
booster_role_id: role.id,
|
||||
},
|
||||
});
|
||||
} else {
|
||||
await prisma.member.create({
|
||||
data: {
|
||||
duid: newM.id,
|
||||
dgid: guild.id,
|
||||
booster_role_id: role.id,
|
||||
name: newM.displayName,
|
||||
},
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
3
src/main.rs
Normal file
3
src/main.rs
Normal file
|
@ -0,0 +1,3 @@
|
|||
fn main() {
|
||||
println!("Hello, world!");
|
||||
}
|
77
src/main.ts
77
src/main.ts
|
@ -1,77 +0,0 @@
|
|||
import { dirname, importx } from "@discordx/importer";
|
||||
import type { Interaction } from "discord.js";
|
||||
import { IntentsBitField } from "discord.js";
|
||||
import * as dotenv from "dotenv";
|
||||
import { Client } from "discordx";
|
||||
import { PrismaClient } from "@prisma/client";
|
||||
|
||||
dotenv.config();
|
||||
export const prisma = new PrismaClient();
|
||||
|
||||
export const bot = new Client({
|
||||
// To use only guild command
|
||||
// botGuilds: [(client) => client.guilds.cache.map((guild) => guild.id)],
|
||||
|
||||
// Discord intents
|
||||
intents: [
|
||||
IntentsBitField.Flags.Guilds,
|
||||
IntentsBitField.Flags.GuildMembers,
|
||||
IntentsBitField.Flags.GuildMessages,
|
||||
IntentsBitField.Flags.GuildMessageReactions,
|
||||
IntentsBitField.Flags.GuildVoiceStates,
|
||||
],
|
||||
|
||||
// Debug logs are disabled in silent mode
|
||||
silent: false,
|
||||
});
|
||||
|
||||
bot.once("ready", async () => {
|
||||
// Make sure all guilds are cached
|
||||
await bot.guilds.fetch();
|
||||
|
||||
// Synchronize applications commands with Discord
|
||||
await bot.initApplicationCommands();
|
||||
|
||||
// To clear all guild commands, uncomment this line,
|
||||
// This is useful when moving from guild commands to global commands
|
||||
// It must only be executed once
|
||||
//
|
||||
// await bot.clearApplicationCommands(
|
||||
// ...bot.guilds.cache.map((g) => g.id)
|
||||
// );
|
||||
|
||||
console.log("Bot started");
|
||||
});
|
||||
|
||||
bot.on("interactionCreate", (interaction: Interaction) => {
|
||||
bot.executeInteraction(interaction);
|
||||
});
|
||||
|
||||
async function run() {
|
||||
// The following syntax should be used in the commonjs environment
|
||||
//
|
||||
// await importx(__dirname + "/{events,commands}/**/*.{ts,js}");
|
||||
|
||||
// The following syntax should be used in the ECMAScript environment
|
||||
await importx(
|
||||
`${dirname(import.meta.url)}/{events,commands,menus}/**/*.{ts,js}`
|
||||
);
|
||||
|
||||
// Let's start the bot
|
||||
if (!process.env.DISCORD_TOKEN) {
|
||||
throw Error("Could not find DISCORD_TOKEN in your environment");
|
||||
}
|
||||
|
||||
// Log in with your bot token
|
||||
await bot.login(process.env.DISCORD_TOKEN);
|
||||
}
|
||||
|
||||
run()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
|
@ -1,103 +0,0 @@
|
|||
import {
|
||||
ActionRowBuilder,
|
||||
ApplicationCommandType,
|
||||
Client,
|
||||
MessageContextMenuCommandInteraction,
|
||||
ModalBuilder,
|
||||
ModalSubmitInteraction,
|
||||
TextChannel,
|
||||
TextInputBuilder,
|
||||
TextInputStyle,
|
||||
} from "discord.js";
|
||||
import { ContextMenu, Discord, ModalComponent } from "discordx";
|
||||
import { prisma } from "../main.js";
|
||||
|
||||
@Discord()
|
||||
export class Report {
|
||||
@ContextMenu({
|
||||
name: "Report user",
|
||||
type: ApplicationCommandType.User,
|
||||
})
|
||||
async reportUser(
|
||||
interaction: MessageContextMenuCommandInteraction,
|
||||
client: Client
|
||||
) {
|
||||
if (interaction.guildId) {
|
||||
let data = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId!,
|
||||
},
|
||||
});
|
||||
|
||||
if (!data) {
|
||||
await prisma.guild.create({
|
||||
data: {
|
||||
id: interaction.guildId!,
|
||||
name: interaction.guild!.name,
|
||||
},
|
||||
});
|
||||
|
||||
data = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId!,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
if (!data!.reports_channel_id) {
|
||||
interaction.reply(
|
||||
"It looks like your guild hasn't set up this feature, please speak to the staff."
|
||||
);
|
||||
} else {
|
||||
const modal = new ModalBuilder()
|
||||
.setTitle("Report user")
|
||||
.setCustomId("report_user");
|
||||
|
||||
const userId = new TextInputBuilder()
|
||||
.setCustomId("user-id")
|
||||
.setValue(interaction.targetId)
|
||||
.setLabel("User ID")
|
||||
.setStyle(TextInputStyle.Short);
|
||||
|
||||
const reason = new TextInputBuilder()
|
||||
.setCustomId("reason")
|
||||
.setLabel("Reason")
|
||||
.setStyle(TextInputStyle.Paragraph);
|
||||
|
||||
modal.addComponents(
|
||||
new ActionRowBuilder<TextInputBuilder>().addComponents(userId),
|
||||
new ActionRowBuilder<TextInputBuilder>().addComponents(reason)
|
||||
);
|
||||
|
||||
interaction.showModal(modal);
|
||||
}
|
||||
} else {
|
||||
interaction.reply({
|
||||
content:
|
||||
"It looks like you aren't in a guild, you can only report within guilds",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ModalComponent()
|
||||
async report_user(interaction: ModalSubmitInteraction, client: Client) {
|
||||
const [user_id, reason] = ["user-id", "reason"].map((id) =>
|
||||
interaction.fields.getTextInputValue(id)
|
||||
);
|
||||
const data = await prisma.guild.findUnique({
|
||||
where: {
|
||||
id: interaction.guildId!,
|
||||
},
|
||||
});
|
||||
client.channels.fetch(data!.reports_channel_id!).then((channel) => {
|
||||
if (channel?.isTextBased()) {
|
||||
let ct = channel as TextChannel;
|
||||
ct.send({
|
||||
content: `<@${interaction.user.id}> reported <@${user_id}> for: ${reason}`,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
interaction.reply({ content: "Reported user.", ephemeral: true });
|
||||
}
|
||||
}
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "ESNext",
|
||||
"module": "ESNext",
|
||||
"outDir": "build",
|
||||
"rootDir": "src",
|
||||
"strict": true,
|
||||
"moduleResolution": "Node",
|
||||
"allowSyntheticDefaultImports": true,
|
||||
|
||||
"experimentalDecorators": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"noImplicitAny": false,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true
|
||||
},
|
||||
"exclude": ["build", "node_modules"]
|
||||
}
|
Loading…
Reference in a new issue