Migrate events to typescript

This commit is contained in:
Ethan Lane 2021-12-02 15:38:38 +00:00
parent 24818bcb44
commit 44571d735a
Signed by: Vylpes
GPG key ID: EED233CC06D12504
10 changed files with 155 additions and 142 deletions

View file

@ -0,0 +1,36 @@
import { Event } from "vylbot-core";
import { GuildMember } from "discord.js";
import EventEmbed from "../helpers/EventEmbed";
import GuildMemberUpdate from "./MemberEvents/GuildMemberUpdate";
export default class MemberEvents extends Event {
constructor() {
super();
}
public override guildMemberAdd(member: GuildMember) {
const embed = new EventEmbed(member.guild, "Member Joined");
embed.AddUser("User", member.user, true);
embed.addField("Created", member.user.createdAt);
embed.setFooter(`Id: ${member.user.id}`);
embed.SendToMemberLogsChannel();
}
public override guildMemberRemove(member: GuildMember) {
const embed = new EventEmbed(member.guild, "Member Left");
embed.AddUser("User", member.user, true);
embed.addField("Joined", member.joinedAt);
embed.setFooter(`Id: ${member.user.id}`);
embed.SendToMemberLogsChannel();
}
public override guildMemberUpdate(oldMember: GuildMember, newMember: GuildMember) {
const handler = new GuildMemberUpdate(oldMember, newMember);
if (oldMember.nickname != newMember.nickname) { // Nickname change
handler.NicknameChanged();
}
}
}

View file

@ -0,0 +1,25 @@
import { GuildMember } from "discord.js";
import EventEmbed from "../../helpers/EventEmbed";
export default class GuildMemberUpdate {
private _oldMember: GuildMember;
private _newMember: GuildMember;
constructor(oldMember: GuildMember, newMember: GuildMember) {
this._oldMember = oldMember;
this._newMember = newMember;
}
public NicknameChanged() {
const oldNickname = this._oldMember.nickname || "*none*";
const newNickname = this._newMember.nickname || "*none*";
const embed = new EventEmbed(this._newMember.guild, "Nickname Changed");
embed.AddUser("User", this._newMember.user, true);
embed.addField("Before", oldNickname, true);
embed.addField("After", newNickname, true);
embed.setFooter(`Id: ${this._newMember.user.id}`);
embed.SendToMemberLogsChannel();
}
}

View file

@ -0,0 +1,35 @@
import { Event } from "vylbot-core";
import { Message } from "discord.js";
import EventEmbed from "../helpers/EventEmbed";
export default class MessageEvents extends Event {
constructor() {
super();
}
public override messageDelete(message: Message) {
if (!message.guild) return;
const embed = new EventEmbed(message.guild, "Message Deleted");
embed.AddUser("User", message.author, true);
embed.addField("Channel", message.channel, true);
embed.addField("Content", `\`\`\`${message.content || "*none*"}\`\`\``);
embed.addField("Attachments", `\`\`\`${message.attachments.map(x => x.url).join("\n")}`);
embed.SendToMessageLogsChannel();
}
public override messageUpdate(oldMessage: Message, newMessage: Message) {
if (!newMessage.guild) return;
if (newMessage.author.bot) return;
if (oldMessage.content == newMessage.content) return;
const embed = new EventEmbed(newMessage.guild, "Message Edited");
embed.AddUser("User", newMessage.author, true);
embed.addField("Channel", newMessage.channel, true);
embed.addField("Before", `\`\`\`${oldMessage.content || "*none*"}\`\`\``);
embed.addField("After", `\`\`\`${newMessage.content || "*none*"}\`\`\``);
embed.SendToMessageLogsChannel();
}
}

54
src/helpers/EventEmbed.ts Normal file
View file

@ -0,0 +1,54 @@
import { MessageEmbed, TextChannel, User, Guild } from "discord.js";
import ErrorMessages from "../constants/ErrorMessages";
import ErrorEmbed from "./ErrorEmbed";
export default class EventEmbed extends MessageEmbed {
private _guild: Guild;
constructor(guild: Guild, title: string) {
super();
super.setColor(process.env.EMBED_COLOUR!);
super.setTitle(title);
this._guild = guild;
}
// Detail methods
public AddUser(title: string, user: User, setThumbnail: boolean = false) {
super.addField(title, `${user} \`${user.tag}\``, true);
if (setThumbnail) {
super.setThumbnail(user.displayAvatarURL());
}
}
public AddReason(message: String) {
super.addField("Reason", message || "*none*");
}
// Send methods
public SendToChannel(name: string) {
const channel = this._guild.channels.cache
.find(channel => channel.name == name) as TextChannel;
if (!channel) {
console.error(`Unable to find channel ${name}`);
return;
}
channel.send(this);
}
public SendToMessageLogsChannel() {
this.SendToChannel(process.env.CHANNELS_LOGS_MESSAGE!)
}
public SendToMemberLogsChannel() {
this.SendToChannel(process.env.CHANNELS_LOGS_MEMBER!)
}
public SendToModLogsChannel() {
this.SendToChannel(process.env.CHANNELS_LOGS_MOD!)
}
}