66 lines
1.7 KiB
TypeScript
66 lines
1.7 KiB
TypeScript
import { ChannelType, Message } from "discord.js";
|
|
import prisma from "../../../../../handlers/database";
|
|
import logger from "../../../../../middlewares/logger";
|
|
|
|
export default {
|
|
execute: async (message: Message) => {
|
|
const { guild, author, content, channel } = message;
|
|
|
|
if (!guild) return;
|
|
if (author.bot) return;
|
|
if (channel?.type !== ChannelType.GuildText) return;
|
|
|
|
const messages = await message.channel.messages.fetch({ limit: 2 });
|
|
const lastMessage = messages.last();
|
|
|
|
const channelCounter = await prisma.guildCounter.findUnique({
|
|
where: {
|
|
guildId_channelId: {
|
|
guildId: guild.id,
|
|
channelId: channel.id,
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!channelCounter) throw new Error("No counters found in channel.");
|
|
|
|
if (
|
|
lastMessage?.author.id === author.id &&
|
|
channel.id === channelCounter.channelId
|
|
) {
|
|
logger.silly(
|
|
`${author.username} sent the last message therefor not allowing again.`
|
|
);
|
|
await message.delete();
|
|
return;
|
|
}
|
|
|
|
if (content !== channelCounter.triggerWord) {
|
|
logger.silly(
|
|
`Counter word ${channelCounter.triggerWord} does not match message ${content}`
|
|
);
|
|
|
|
await message.delete();
|
|
return;
|
|
}
|
|
|
|
const updateGuildCounter = await prisma.guildCounter.update({
|
|
where: {
|
|
guildId_channelId: {
|
|
guildId: guild.id,
|
|
channelId: channel.id,
|
|
},
|
|
},
|
|
data: {
|
|
count: {
|
|
increment: 1,
|
|
},
|
|
},
|
|
});
|
|
|
|
logger.silly(updateGuildCounter);
|
|
|
|
if (!updateGuildCounter)
|
|
logger.error(`Failed to update counter - ${updateGuildCounter}`);
|
|
},
|
|
};
|