WIP: [#1]: Athena Rewrite #1
@@ -4,6 +4,8 @@ import { CommandClient, Event, Guild } from 'athena-prime';
|
|||||||
// Internal Imports
|
// Internal Imports
|
||||||
import { Database } from '../shared/Database';
|
import { Database } from '../shared/Database';
|
||||||
|
|
||||||
|
// ---------------
|
||||||
|
|
||||||
class GuildCreateEvent extends Event<CommandClient> {
|
class GuildCreateEvent extends Event<CommandClient> {
|
||||||
event: string = 'guildCreate' as const;
|
event: string = 'guildCreate' as const;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +0,0 @@
|
|||||||
import { AnyThreadChannel } from 'discord.js';
|
|
||||||
|
|
||||||
export async function handleThreadCreate(thread: AnyThreadChannel, newlyCreated: boolean) {
|
|
||||||
try {
|
|
||||||
await thread.join();
|
|
||||||
} catch (e) {
|
|
||||||
console.error('Failed to join thread:');
|
|
||||||
console.error(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
import { Guild, GuildMember, GuildTextBasedChannel, time, VoiceBasedChannel, VoiceState } from 'discord.js';
|
|
||||||
import { Database } from '../shared/Database';
|
|
||||||
|
|
||||||
export async function handleVoiceStateUpdate(oldState: VoiceState, newState: VoiceState) {
|
|
||||||
// The logChannel declaration being inside is purposeful, as this event is fired a lot for users talking.
|
|
||||||
if (newState.channelId != null && oldState.channelId != null && newState.channelId != oldState.channelId) {
|
|
||||||
const logChannel = await getVoiceLogsChannel(newState.guild);
|
|
||||||
if (!logChannel) return;
|
|
||||||
|
|
||||||
await sendMovedMessage(logChannel, newState.member!, oldState.channel!, newState.channel!);
|
|
||||||
} else if (oldState.channelId == null && newState.channelId != null) {
|
|
||||||
const logChannel = await getVoiceLogsChannel(newState.guild);
|
|
||||||
if (!logChannel) return;
|
|
||||||
|
|
||||||
await sendJoinMessage(logChannel, newState.member!, newState.channel!);
|
|
||||||
} else if (newState.channelId == null && oldState.channelId != null) {
|
|
||||||
const logChannel = await getVoiceLogsChannel(newState.guild);
|
|
||||||
if (!logChannel) return;
|
|
||||||
|
|
||||||
await sendLeftMessage(logChannel, newState.member!, oldState.channel!);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendJoinMessage(channel: GuildTextBasedChannel, member: GuildMember, voiceChannel: VoiceBasedChannel) {
|
|
||||||
await channel.send(`${member} joined ${voiceChannel} at ${time()}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendLeftMessage(channel: GuildTextBasedChannel, member: GuildMember, voiceChannel: VoiceBasedChannel) {
|
|
||||||
await channel.send(`${member} left ${voiceChannel} at ${time()}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function sendMovedMessage(channel: GuildTextBasedChannel, member: GuildMember, oldVoiceChannel: VoiceBasedChannel, newVoiceChannel: VoiceBasedChannel) {
|
|
||||||
await channel.send(`${member} moved from ${oldVoiceChannel} to ${newVoiceChannel} at ${time()}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getVoiceLogsChannel(guild: Guild): Promise<GuildTextBasedChannel | undefined> {
|
|
||||||
const settings = await Database.getGuildSettings(guild.id);
|
|
||||||
|
|
||||||
if (!settings || !settings.voice_logs_channel_id) return;
|
|
||||||
|
|
||||||
const channel = await guild.channels.fetch(settings.voice_logs_channel_id);
|
|
||||||
|
|
||||||
if (!channel || !channel.isSendable()) return;
|
|
||||||
|
|
||||||
return channel as GuildTextBasedChannel;
|
|
||||||
}
|
|
||||||
+6
-3
@@ -3,7 +3,10 @@ import guildBanRemove from './guildBanRemove';
|
|||||||
import guildCreate from './guildCreate';
|
import guildCreate from './guildCreate';
|
||||||
import guildMemberAdd from './guildMemberAdd';
|
import guildMemberAdd from './guildMemberAdd';
|
||||||
export * from './handle-message';
|
export * from './handle-message';
|
||||||
export * from './handle-thread-create';
|
import threadCreate from './threadCreate';
|
||||||
export * from './handle-voice-state-update';
|
|
||||||
|
|
||||||
export default [guildBanRemove, guildCreate, guildMemberAdd];
|
import voiceChannelJoin from './voiceChannelJoin';
|
||||||
|
import voiceChannelLeft from './voiceChannelLeft';
|
||||||
|
import voiceChannelSwitch from './voiceChannelSwitch';
|
||||||
|
|
||||||
|
export default [guildBanRemove, guildCreate, guildMemberAdd, threadCreate, voiceChannelJoin, voiceChannelLeft, voiceChannelSwitch];
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// External Imports
|
||||||
|
import { CommandClient, Event, ThreadChannel } from 'athena-prime';
|
||||||
|
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
class ThreadCreateEvent extends Event<CommandClient> {
|
||||||
|
event: string = 'threadCreate' as const;
|
||||||
|
|
||||||
|
async handle(context: CommandClient<any, any>, channel: ThreadChannel) {
|
||||||
|
await context.joinThread(channel.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new ThreadCreateEvent('threadCreate');
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// External Imports
|
||||||
|
import { CommandClient, Event, Member, GuildVoiceChannel } from "athena-prime";
|
||||||
|
|
||||||
|
// Internal Imports
|
||||||
|
import { Database } from "../shared/Database";
|
||||||
|
import { SetSeverity } from "../utils";
|
||||||
|
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
class VoiceChannelJoinEvent extends Event<CommandClient> {
|
||||||
|
event: string = 'voiceChannelJoin' as const;
|
||||||
|
|
||||||
|
async handle(context: CommandClient<any, any>, member: Member, channel: GuildVoiceChannel) {
|
||||||
|
const settings = await Database.GetOrCreateSettings(channel.guild.id);
|
||||||
|
if (!settings.voice_logs_channel_id) return;
|
||||||
|
|
||||||
|
await context.createMessage(settings.voice_logs_channel_id, {
|
||||||
|
embed: {
|
||||||
|
...SetSeverity('success'),
|
||||||
|
|
||||||
|
author: {
|
||||||
|
name: member.username,
|
||||||
|
icon_url: member.avatarURL
|
||||||
|
},
|
||||||
|
|
||||||
|
fields: [
|
||||||
|
{ name: 'Member', value: `${member.username} (${member.mention})`, inline: true },
|
||||||
|
{ name: 'Channel', value: `${channel.mention}`, inline: true },
|
||||||
|
{ name: 'Time', value: `<t:${new Date().toISOString()}>`, inline: true },
|
||||||
|
],
|
||||||
|
|
||||||
|
title: 'Joined Voice Channel'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new VoiceChannelJoinEvent('voiceChannelJoin');
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// External Imports
|
||||||
|
import { CommandClient, Event, Member, GuildVoiceChannel } from "athena-prime";
|
||||||
|
|
||||||
|
// Internal Imports
|
||||||
|
import { Database } from "../shared/Database";
|
||||||
|
import { SetSeverity } from "../utils";
|
||||||
|
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
class VoiceChannelLeftEvent extends Event<CommandClient> {
|
||||||
|
event: string = 'voiceChannelLeft' as const;
|
||||||
|
|
||||||
|
async handle(context: CommandClient<any, any>, member: Member, channel: GuildVoiceChannel) {
|
||||||
|
const settings = await Database.GetOrCreateSettings(channel.guild.id);
|
||||||
|
if (!settings.voice_logs_channel_id) return;
|
||||||
|
|
||||||
|
await context.createMessage(settings.voice_logs_channel_id, {
|
||||||
|
embed: {
|
||||||
|
author: {
|
||||||
|
name: member.username,
|
||||||
|
icon_url: member.avatarURL
|
||||||
|
},
|
||||||
|
|
||||||
|
...SetSeverity('error'),
|
||||||
|
|
||||||
|
fields: [
|
||||||
|
{ name: 'Member', value: `${member.username} (${member.mention})`, inline: true },
|
||||||
|
{ name: 'Channel', value: `${channel.mention}`, inline: true },
|
||||||
|
{ name: 'Time', value: `<t:${new Date().toISOString()}>`, inline: true },
|
||||||
|
],
|
||||||
|
|
||||||
|
title: 'Left Voice Channel'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new VoiceChannelLeftEvent('voiceChannelLeft');
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
// External Imports
|
||||||
|
import { CommandClient, Event, Member, GuildVoiceChannel } from "athena-prime";
|
||||||
|
|
||||||
|
// Internal Imports
|
||||||
|
import { Database } from "../shared/Database";
|
||||||
|
import { SetSeverity } from "../utils";
|
||||||
|
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
class VoiceChannelSwitchEvent extends Event<CommandClient> {
|
||||||
|
event: string = 'voiceChannelSwitch' as const;
|
||||||
|
|
||||||
|
async handle(context: CommandClient<any, any>, member: Member, channel: GuildVoiceChannel, old: GuildVoiceChannel) {
|
||||||
|
const settings = await Database.GetOrCreateSettings(channel.guild.id);
|
||||||
|
if (!settings.voice_logs_channel_id) return;
|
||||||
|
|
||||||
|
await context.createMessage(settings.voice_logs_channel_id, {
|
||||||
|
embed: {
|
||||||
|
...SetSeverity('warning'),
|
||||||
|
|
||||||
|
author: {
|
||||||
|
name: member.username,
|
||||||
|
icon_url: member.avatarURL
|
||||||
|
},
|
||||||
|
|
||||||
|
fields: [
|
||||||
|
{ name: 'Member', value: `${member.username} (${member.mention})`, inline: true },
|
||||||
|
{ name: 'Channel', value: `${old.mention} -> ${channel.mention}`, inline: true },
|
||||||
|
{ name: 'Time', value: `<t:${new Date().toISOString()}>`, inline: true },
|
||||||
|
],
|
||||||
|
|
||||||
|
title: 'Moved Voice Channel'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new VoiceChannelSwitchEvent('voiceChannelSwitch');
|
||||||
Reference in New Issue
Block a user