Eventos
Reaja ao ciclo de vida do Discord com módulos pequenos, tipos do Discord.js e contexto de guild preservado.
Client.onClient.onceEvents
Eventos contínuos e únicos#
Use Client.on() para todas as emissões e Client.once() quando o handler deve rodar uma única vez.
import { ActivityType, Events } from '@ninenity/core'import Client from '../../Shared/Settings/Client'Client.once(Events.ClientReady, { execute: async readyClient => { readyClient.user.setPresence({ activities: [ { name: 'Ninenity', type: ActivityType.Watching } ], status: 'online' }) console.log('[Ready] ' + readyClient.user.tag + ' online') }})import { Events, type Message } from '@ninenity/core'import Client from '../../Shared/Settings/Client'Client.on(Events.MessageCreate, { execute: async (message: Message) => { if (message.author.bot) return if (message.content.trim().toLowerCase() !== 'hello') return await message.reply('Olá, ' + message.author.username + '!') }})Entrada de membros#
O evento recebe os objetos nativos e pode usar recursos configurados para a guild atual.
import { Events, type GuildMember } from '@ninenity/core'import Client from '../../Shared/Settings/Client'Client.on(Events.GuildMemberAdd, { execute: async (member: GuildMember) => { const channels = Client.getAppChannels() const welcome = channels.welcome ?? member.guild.systemChannel if (!welcome?.isTextBased()) return await welcome.send( 'Boas-vindas, ' + member.toString() + '! Leia as regras para começar.' ) }})Erros e avisos do Discord#
Centralize mensagens técnicas sem esconder o contexto da origem.
import { Events } from '@ninenity/core'import Client from '../../Shared/Settings/Client'Client.on(Events.Warn, { execute: async (message: string) => { console.log('[Discord:warn] ' + message) }})Client.on(Events.Error, { execute: async (error: Error) => { console.log('[Discord:error] ' + error.message) }})Use console.log() para os logs da aplicação. Se quiser cor no terminal, aplique Color() somente ao texto; não introduza uma segunda abstração de logger no código do bot.
Boas práticas#
- Retorne cedo para ignorar bots, DMs ou eventos que não interessam.
- Não faça tarefas longas em série dentro de eventos muito frequentes como
MessageCreate. - Extraia regras de negócio para
Utilsou serviços e mantenha o handler como orquestrador. - Capture falhas esperadas de rede ao enviar mensagens; uma permissão removida não deve derrubar o processo.
- Use um arquivo por evento ou por responsabilidade claramente relacionada.