如何在Java Discord-JDA中特定于MEMBER_VOICE_KICK操作触发事件侦听器?

huangapple go评论111阅读模式
英文:

How do I trigger an event listener in Java Discord-JDA specifically for MEMBER_VOICE_KICK action?

问题

我有一个具有以下问题的事件。

  1. 每当创建新的审计日志时,它都会触发。
  2. 如果用户进入语音聊天,它也会触发。

这是事件监听器:

  1. @Override
  2. public void onGuildAuditLogEntryCreate(GuildAuditLogEntryCreateEvent event) {
  3. JDA jda=event.getJDA();
  4. Guild gld=jda.getGuilds().get(0);
  5. AuditLogPaginationAction auditLogs = event.getGuild().retrieveAuditLogs();
  6. auditLogs.type(ActionType.MEMBER_VOICE_KICK);
  7. auditLogs.limit(1);
  8. auditLogs.queue( (entrys) ->
  9. {
  10. if (entrys.isEmpty()) return;
  11. AuditLogEntry entry = entrys.get(0);
  12. System.out.println("The User "+ entry.getUser().getId());
  13. Member member=gld.getMemberById(entry.getUser().getId());
  14. gld.modifyNickname(member,"User Voice kicker").queue();
  15. });
  16. }

我的目标是:

  • 我希望它只在发生MEMBER_VOICE_KICK操作时触发。只有这个。

我尝试过的:

  • 我尝试使用onGuildVoiceUpdate()事件...但我遇到了相同的问题。
英文:

I have this event that has these problems.

  1. It gets triggered whenever a new audit log gets created.
  2. If a user enters voice-chat it gets triggered too

this the event listener

  1. @Override
  2. public void onGuildAuditLogEntryCreate(GuildAuditLogEntryCreateEvent event) {
  3. JDA jda=event.getJDA();
  4. Guild gld=jda.getGuilds().get(0);
  5. AuditLogPaginationAction auditLogs = event.getGuild().retrieveAuditLogs();
  6. auditLogs.type(ActionType.MEMBER_VOICE_KICK);
  7. auditLogs.limit(1);
  8. auditLogs.queue( (entrys) ->
  9. {
  10. if (entrys.isEmpty()) return;
  11. AuditLogEntry entry = entrys.get(0);
  12. System.out.println("The User "+ entry.getUser().getId());
  13. Member member=gld.getMemberById(entry.getUser().getId());
  14. gld.modifyNickname(member,"User Voice kicker").queue();
  15. });
  16. }

What i am aiming at:

  • I want it to specifically be triggered whenever a MEMBER_VOICE_KICK action happens. Only That

What i tried:

  • I tried using the onGuildVoiceUpdate() event.... i got the same problem.

答案1

得分: 0

事件已经为您提供了已创建的条目,您可以专门查看该条目。

  1. public void onGuildAuditLogEntryCreate(GuildAuditLogEntryCreateEvent event) {
  2. AuditLogEntry entry = event.getEntry();
  3. if (entry.getType() != ActionType.MEMBER_VOICE_KICK) return; // 保护条件
  4. String userId = entry.getUserId();
  5. guild.retrieveMemberById(userId).flatMap(member ->
  6. member.modifyNickname("用户语音踢出者")
  7. ).queue();
  8. }
英文:

The event already provides you the created entry, you can just look at that one specifically.

  1. public void onGuildAuditLogEntryCreate(GuildAuditLogEntryCreateEvent event) {
  2. AuditLogEntry entry = event.getEntry();
  3. if (entry.getType() != ActionType.MEMBER_VOICE_KICK) return; // guard case
  4. String userId = entry.getUserId();
  5. guild.retrieveMemberById(userId).flatMap(member ->
  6. member.modifyNickname("User Voice kicker")
  7. ).queue();
  8. }

huangapple
  • 本文由 发表于 2023年5月29日 02:02:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/76352913.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定