Skip to main content

Écouteurs

Comment utiliser les écouteurs

Necord prend en charge l'interaction avec tous les événements Discord via les décorateurs @On et @Once. Ces décorateurs peuvent être utilisés dans n'importe quelle classe injectable, comme des services ou des providers personnalisés.

app.service.ts
import { Injectable, Logger } from '@nestjs/common';
import { Once, On, Context, ContextOf } from 'necord';

@Injectable()
export class AppService {
private readonly logger = new Logger(AppService.name);

@Once('clientReady')
public onReady(@Context() [client]: ContextOf<'clientReady'>) {
this.logger.log(`Bot logged in as ${client.user.username}`);
}

@On('warn')
public onWarn(@Context() [message]: ContextOf<'warn'>) {
this.logger.warn(message);
}
}
Avertissement

Si vous utilisez des filtres, des gardes ou des intercepteurs globaux, ils seront déclenchés une fois par événement ! Cela signifie que si vous répondez au message dans des gardes, vous pouvez rencontrer des problèmes de réponses dupliquées ou d'interactions invalides. Consultez les métadonnées de NecordExecutionContext.getDiscovery() pour en savoir plus sur le contexte actuel.

Contexte

Vous avez peut-être remarqué le décorateur @Context dans le dernier extrait : il est utilisé pour injecter le contexte de l'événement dans la méthode. Comme il existe de nombreux types d'événements, son type doit être déduit du type ContextOf<type: string>.

Vous pouvez accéder aux variables de contexte en utilisant le décorateur @Context() dans votre fonction, ce qui remplira la variable avec un tableau d'arguments.

app.service.ts
@On('messageCreate')
public onMessageCreate(@Context() [message]: ContextOf<'messageCreate'>) {
console.log(message.content);
}

Événements personnalisés

Necord prend en charge nativement tous les événements fournis par discord.js. Vous pouvez également créer des événements personnalisés à l'aide des décorateurs @CustomListenerHandler et @CustomListener.

user-update.handler.ts
import { Injectable } from '@nestjs/common';
import { CustomListener, CustomListenerHandler, BaseHandler, ContextOf, createCustomOnDecorator } from 'necord';
import { User } from 'discord.js';

export type CustomUserUpdateEvents = {
userAvatarUpdate: [user: User, oldAvatar: string, newAvatar: string];
};

export type ContextOfCustomUserUpdate<K extends keyof E, E = CustomUserUpdateEvents> = E[K];

export const OnCustomUserUpdate = createCustomOnDecorator<CustomUserUpdateEvents>();

@Injectable()
@CustomListener('userUpdate')
export class UserUpdateHandler extends BaseHandler<CustomUserUpdateEvents> {
@CustomListenerHandler()
public handleUserAvatarUpdate([oldUser, newUser]: ContextOf<'userUpdate'>) {
if (oldUser.partial) return;

if (oldUser.displayAvatarURL() !== newUser.displayAvatarURL()) {
this.emit(
'userAvatarUpdate',
newUser,
oldUser.displayAvatarURL(),
newUser.displayAvatarURL()
);
}
}
}
Astuce

De plus, vous pouvez créer plusieurs gestionnaires d'événements personnalisés dans une seule classe en ajoutant d'autres méthodes avec le décorateur @CustomListenerHandler().

Vous pouvez ensuite écouter l'événement personnalisé à l'aide du décorateur @OnCustomUserUpdate.

app.service.ts
import { Injectable } from '@nestjs/common';
import { OnCustomUserUpdate, ContextOfCustomUserUpdate, Context } from './user-update.handler';

@Injectable()
export class AppService {
@OnCustomUserUpdate('userAvatarUpdate')
public onAvatarUpdate(@Context() context: ContextOfCustomUserUpdate<'userAvatarUpdate'>) {
const [user, oldAvatar, newAvatar] = context;
console.log(`User ${user.username} changed avatar from ${oldAvatar} to ${newAvatar}`);
}
}

Vous pouvez également utiliser @On<CustomUserUpdateEvents>('userAvatarUpdate') au lieu de créer un nouveau décorateur. Mais créer un nouveau décorateur est plus pratique et plus propre.

Liste des événements personnalisés

Voici la liste de tous les événements personnalisés fournis par Necord. Ils sont accessibles via le décorateur @On.

Événements de salon

Nom de l'événementDescription
guildChannelPermissionsUpdateÉmis chaque fois que la surcharge des permissions d'un salon pour un serveur est mise à jour.

Événements de serveur

Nom de l'événementDescription
guildBoostLevelUpÉmis chaque fois que le niveau de boost d'un serveur augmente.
guildBoostLevelDownÉmis chaque fois que le niveau de boost d'un serveur diminue.
guildBannerAddÉmis chaque fois que la bannière d'un serveur est ajoutée.
guildAfkChannelAddÉmis chaque fois que le salon AFK d'un serveur est ajouté.
guildVanityURLAddEmitted whenever a guild's vanity URL is added.
guildVanityURLUpdateEmitted whenever a guild's vanity URL is updated.
guildVanityURLRemoveEmitted whenever a guild's vanity URL is removed.
guildFeaturesUpdateEmitted whenever a guild's features are updated.
guildAcronymUpdateEmitted whenever a guild's acronym is updated.
guildOwnerUpdateEmitted whenever a guild's owner is updated.
guildPartnerAddEmitted whenever a guild's is partner of discord now
guildPartnerRemoveEmitted whenever a guild's is no longer partner of discord
guildVerificationAddEmitted whenever a guild's verification level is added.
guildVerificationRemoveEmitted whenever a guild's verification level is removed.

Guild Audit Log Events

Nom de l'événementDescription
guildAuditLogEntryAddEmitted whenever an entry is added to the audit log.
guildAuditLogEntryUpdateEmitted whenever an entry is updated in the audit log.
guildAuditLogEntryDeleteEmitted whenever an entry is removed from the audit log.
guildAuditLogEntryWebhookCreateEmitted whenever a webhook is created in the audit log.
guildAuditLogEntryWebhookUpdateEmitted whenever a webhook is updated in the audit log.
guildAuditLogEntryWebhookDeleteEmitted whenever a webhook is deleted in the audit log.

Guild Member Events

Nom de l'événementDescription
guildMemberBoostEmitted whenever a member's boost is activated.
guildMemberUnboostEmitted whenever a member's boost is deactivated.
guildMemberRoleAddEmitted whenever a role is added to a member.
guildMemberRoleRemoveEmitted whenever a role is removed from a member.
guildMemberNicknameUpdateEmitted whenever a member's nickname is updated.
guildMemberEnteredEmitted whenever a member enters a guild.
guildMemberAvatarAddEmitted whenever a member's avatar is added.
guildMemberAvatarRemoveEmitted whenever a member's avatar is removed.
guildMemberAvatarUpdateEmitted whenever a member's avatar is updated.

Role Update Events

Nom de l'événementDescription
rolePositionUpdateEmitted whenever a role's position is updated.
rolePermissionsUpdateEmitted whenever a role's permissions are updated.
roleIconAddEmitted whenever a role's icon is added.
roleIconRemoveEmitted whenever a role's icon is removed.
roleIconUpdateEmitted whenever a role's icon is updated.

Thread Update Events

Nom de l'événementDescription
threadStateUpdateEmitted whenever a thread's state is updated.
threadNameUpdateEmitted whenever a thread's name is updated.
threadLockStateUpdateEmitted whenever a thread's lock state is updated.
threadRateLimitPerUserUpdateEmitted whenever a thread's rate limit per user is updated.
threadAutoArchiveDurationUpdateEmitted whenever a thread's auto archive duration is updated.

Message Events

Nom de l'événementDescription
messagePinnedEmitted whenever a message is pinned.
messageContentEditedEmitted whenever a message is updated.

Presence Events

Nom de l'événementDescription
guildMemberOfflineEmitted whenever a member goes offline.
guildMemberOnlineEmitted whenever a member goes online.

User Events

Nom de l'événementDescription
userAvatarUpdateEmitted whenever a user's avatar is updated.
userUsernameUpdateEmitted whenever a user's username is updated.
userDiscriminatorUpdateEmitted whenever a user's discriminator is updated.
userFlagsUpdateEmitted whenever a user's flags are updated.
userPrimaryGuildUpdateEmitted whenever a user's primary guild is updated.

Voice Events

Nom de l'événementDescription
voiceChannelJoinEmitted whenever a member joins a voice channel.
voiceChannelLeaveEmitted whenever a member leaves a voice channel.
voiceChannelSwitchEmitted whenever a member switches voice channel.
voiceChannelMutestateEmitted whenever a member is muted or deafened in a voice channel.
voiceChannelUnmuteEmitted whenever a member is unmuted in a voice channel.
voiceChannelDeafEmitted whenever a member is deafened in a voice channel.
voiceChannelUndeafEmitted whenever a member is undeafened in a voice channel.
voiceStreamingStartEmitted whenever a member starts streaming.
voiceStreamingStopEmitted whenever a member stops streaming.