JDAイベントゲッターがnullを返し、ボット自体のみを返すロールのすべてのメンバーを取得する

BurgBoi:

私は、ギルドメンバーがメッセージにリアクションを追加/削除するときにロールを追加/削除し、トリガーが発生したときにすべてのメンバーを特定のロールから削除するディスコードボットを作成しようとしています。

私はやるたびevent.getmemberのためonMessageReactionRemoveのイベントは、私は常に何らかの理由でヌルを取得します。特定の役割を持つすべてのメンバーを取得してリストに追加しようとすると、ボット自体のみがリストに表示されます。ボットが特定のロールからすべてのメンバーを削除しようとしたときにも、エラーは発生しません。このボットを1日前に動作させましたが、なぜ今は動作しないのかわかりません。

ドキュメントでは、ユーザーがギルドにいない場合はnullを返すと記載されていますが、リアクションを削除したとき、私はまだギルドにいました。

以下は、ボットがリアクションを削除したメンバーを取得しようとしたときのエラーメッセージです。このエラーは、ボットがメンバーからロールを削除しようとしたときに発生します。

[JDA MainWS-ReadThread] ERROR JDA - One of the EventListeners had an uncaught exception
java.lang.IllegalArgumentException: Member may not be null
    at net.dv8tion.jda.internal.utils.Checks.notNull(Checks.java:64)
    at net.dv8tion.jda.internal.entities.GuildImpl.removeRoleFromMember(GuildImpl.java:1209)
    at me.david.tskmanager.eventlisteners.EventChannelsEventListener.onMessageReactionRemove(EventChannelsEventListener.java:47)
    at net.dv8tion.jda.api.hooks.ListenerAdapter.onEvent(ListenerAdapter.java:440)
    at net.dv8tion.jda.api.hooks.InterfacedEventManager.handle(InterfacedEventManager.java:96)
    at net.dv8tion.jda.internal.hooks.EventManagerProxy.handleInternally(EventManagerProxy.java:82)
    at net.dv8tion.jda.internal.hooks.EventManagerProxy.handle(EventManagerProxy.java:69)
    at net.dv8tion.jda.internal.JDAImpl.handleEvent(JDAImpl.java:150)
    at net.dv8tion.jda.internal.handle.MessageReactionHandler.onRemove(MessageReactionHandler.java:200)
    at net.dv8tion.jda.internal.handle.MessageReactionHandler.handleInternally(MessageReactionHandler.java:146)
    at net.dv8tion.jda.internal.handle.SocketHandler.handle(SocketHandler.java:36)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onDispatch(WebSocketClient.java:947)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onEvent(WebSocketClient.java:834)
    at net.dv8tion.jda.internal.requests.WebSocketClient.handleEvent(WebSocketClient.java:812)
    at net.dv8tion.jda.internal.requests.WebSocketClient.onBinaryMessage(WebSocketClient.java:985)
    at com.neovisionaries.ws.client.ListenerManager.callOnBinaryMessage(ListenerManager.java:385)
    at com.neovisionaries.ws.client.ReadingThread.callOnBinaryMessage(ReadingThread.java:276)
    at com.neovisionaries.ws.client.ReadingThread.handleBinaryFrame(ReadingThread.java:996)
    at com.neovisionaries.ws.client.ReadingThread.handleFrame(ReadingThread.java:755)
    at com.neovisionaries.ws.client.ReadingThread.main(ReadingThread.java:108)
    at com.neovisionaries.ws.client.ReadingThread.runMain(ReadingThread.java:64)
    at com.neovisionaries.ws.client.WebSocketThread.run(WebSocketThread.java:45)

これが私のコードです:

@Override
    public void onMessageReactionRemove(@Nonnull MessageReactionRemoveEvent event) {
        System.out.println(event.getMember());
        if (trackedMessages.contains(event.getMessageId()) && event.getReactionEmote().getEmote().equals(event.getGuild().getEmoteById(emoteID))) {
            GuildCache cache = GuildCache.getCache(event.getGuild().getId());
            System.out.println(cache.getAttendingEventRole());
            event.getGuild().removeRoleFromMember(event.getMember(), cache.getAttendingEventRole()).queue();
        }
    }

    @Override
    public void onMessageUpdate(@Nonnull MessageUpdateEvent event) {
        if (trackedMessages.contains(event.getMessageId()) && event.getMessage().getContentRaw().startsWith("[FINISHED]")) {
            GuildCache cache = GuildCache.getCache(event.getGuild().getId());
            List<Member> members = new ArrayList<>();
            members.addAll(event.getGuild().getMembersWithRoles(cache.getAttendingEventRole()));
            for (Member member : members) {
                event.getGuild().removeRoleFromMember(member, cache.getAttendingEventRole()).queue();
                System.out.println("removed role");
            }
            trackedMessages.remove(event.getMessageId());
        }
    }

さらにコードスニペットが必要な場合は、必要なものだけコメントしてください。

編集event.getMembernullのみが返される問題が解決されました。

編集2:ムーアフーンがコメントで述べたことは、他の問題を解決するのに役立ちました。ボットがメンバーをボイスチャットにキャッシュするだけで、特定の役割を持つメンバーを取得できなかった問題。

Minn:

event.getUserId()代わりに使用してくださいDiscordはリアクション削除のメンバー情報を提供していません。このremoveRoleFromMemberメソッドはユーザーIDも受け入れます:removeRoleFromMember(String、Role)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

すべてのnullデータを返すピボットテーブル

分類Dev

すべての* .devドメインがローカルホストをターゲットにしているのはなぜですか?

分類Dev

JDA-ボット自体のユーザーIDを取得する方法

分類Dev

c ++:std :: functionのインスタンスのターゲットがnullポインタを返す

分類Dev

私の不和ボットが新しいギルドメンバーのタグを歓迎するときに「未定義」を返すのはなぜですか

分類Dev

最初のバッチ自体ですべてのデータを読み取る kafka ストリーミング

分類Dev

ドロップダウンメニューを使用してボタンのonclickイベントを作成する

分類Dev

メッセージを取得するためのGmailAPIバッチリクエストは401を返します(ログインが必要です)

分類Dev

非ルートロガーを使用してすべてのレベルのイベントを取得する

分類Dev

スタイルシート内のIE(すべてのバージョン)のみをターゲットにする方法は?

分類Dev

Debian バスター arm64 apt がエラー メッセージを返し、パッケージのインストールが機能する

分類Dev

バックボーン-コレクション内のすべてのモデルに対して発生するアグリゲーターイベント

分類Dev

ループでPyQt5ボタンを作成する:すべてのボタンが同じコールバックをトリガーします

分類Dev

すべてのコメント ヘルプを取得すると、API は 403 エラーを返します

分類Dev

シンボリックリンクのターゲットを読み取り、ターゲットを1つインクリメントします

分類Dev

ターゲットが依存するすべてのソースファイルをCMakeで取得する

分類Dev

フロントエンドとしてドロップダウンを使用し、バックエンドでwhere句とプリペアドステートメントを使用して、SQLからテーブルのすべての値を返します

分類Dev

Xcodeでターゲットのメンバーシップにあるすべてのファイルを表示する

分類Dev

ホバーターゲットに関連する値ではなく、複数の値を返すホバーイベント

分類Dev

ギルドのすべてのメンバーを反復処理し、JDA上に構築されたDiscordボットを使用してニックネームを変更する方法

分類Dev

ギルドのすべてのメンバーを反復処理し、JDA上に構築されたDiscordボットを使用してニックネームを変更する方法

分類Dev

ターゲットの代わりにすべての行を返すパターンファイルを持つgrep

分類Dev

チームの添付ボタンを使用してボットアプリケーションにファイルをアップロードすると、MicrosoftTeamsがエラーを返す

分類Dev

QMainWindowでイベントをオーバーロードすると、他のすべてのイベントがブロックされます

分類Dev

JPARepositoryを使用してターゲットエンティティのみを返す方法

分類Dev

すべてのイベントタイプのJavaScriptでコールバック関数を定義する

分類Dev

カスタムタイプリストを調べて、特定のメンバーが文字「x」で始まる最初のオブジェクトを返します

分類Dev

すべてのUIButtonのtouchUpInsideイベントにターゲットを追加します

分類Dev

SQL Serverのすべてのデータベースをドロップダウンリストにバインドしたい(ドロップダウンリスト内のすべてのデータベースのリストが必要)

Related 関連記事

  1. 1

    すべてのnullデータを返すピボットテーブル

  2. 2

    すべての* .devドメインがローカルホストをターゲットにしているのはなぜですか?

  3. 3

    JDA-ボット自体のユーザーIDを取得する方法

  4. 4

    c ++:std :: functionのインスタンスのターゲットがnullポインタを返す

  5. 5

    私の不和ボットが新しいギルドメンバーのタグを歓迎するときに「未定義」を返すのはなぜですか

  6. 6

    最初のバッチ自体ですべてのデータを読み取る kafka ストリーミング

  7. 7

    ドロップダウンメニューを使用してボタンのonclickイベントを作成する

  8. 8

    メッセージを取得するためのGmailAPIバッチリクエストは401を返します(ログインが必要です)

  9. 9

    非ルートロガーを使用してすべてのレベルのイベントを取得する

  10. 10

    スタイルシート内のIE(すべてのバージョン)のみをターゲットにする方法は?

  11. 11

    Debian バスター arm64 apt がエラー メッセージを返し、パッケージのインストールが機能する

  12. 12

    バックボーン-コレクション内のすべてのモデルに対して発生するアグリゲーターイベント

  13. 13

    ループでPyQt5ボタンを作成する:すべてのボタンが同じコールバックをトリガーします

  14. 14

    すべてのコメント ヘルプを取得すると、API は 403 エラーを返します

  15. 15

    シンボリックリンクのターゲットを読み取り、ターゲットを1つインクリメントします

  16. 16

    ターゲットが依存するすべてのソースファイルをCMakeで取得する

  17. 17

    フロントエンドとしてドロップダウンを使用し、バックエンドでwhere句とプリペアドステートメントを使用して、SQLからテーブルのすべての値を返します

  18. 18

    Xcodeでターゲットのメンバーシップにあるすべてのファイルを表示する

  19. 19

    ホバーターゲットに関連する値ではなく、複数の値を返すホバーイベント

  20. 20

    ギルドのすべてのメンバーを反復処理し、JDA上に構築されたDiscordボットを使用してニックネームを変更する方法

  21. 21

    ギルドのすべてのメンバーを反復処理し、JDA上に構築されたDiscordボットを使用してニックネームを変更する方法

  22. 22

    ターゲットの代わりにすべての行を返すパターンファイルを持つgrep

  23. 23

    チームの添付ボタンを使用してボットアプリケーションにファイルをアップロードすると、MicrosoftTeamsがエラーを返す

  24. 24

    QMainWindowでイベントをオーバーロードすると、他のすべてのイベントがブロックされます

  25. 25

    JPARepositoryを使用してターゲットエンティティのみを返す方法

  26. 26

    すべてのイベントタイプのJavaScriptでコールバック関数を定義する

  27. 27

    カスタムタイプリストを調べて、特定のメンバーが文字「x」で始まる最初のオブジェクトを返します

  28. 28

    すべてのUIButtonのtouchUpInsideイベントにターゲットを追加します

  29. 29

    SQL Serverのすべてのデータベースをドロップダウンリストにバインドしたい(ドロップダウンリスト内のすべてのデータベースのリストが必要)

ホットタグ

アーカイブ