当前位置: 首页 > 知识库问答 >
问题:

Discord JDA Bot无限发送消息

潘灵均
2023-03-14

我试图使用Discord JDA API发送消息,但是每当我发送一条消息时,它就会无限地发送。

JDA版本:4.2.1_255

我尝试过什么:

使用GuildMessageReceivedEvent而不是MessageReceivedEvent来研究此问题

伪代码:

Guild server = e.getGuild();
    Role role = server.getRolesByName("Java", false).get(0);
    System.out.println(role);
    for(Member members : server.getMembers()) {
        if(members.getRoles().contains(role)) {
            sendPrivateMessage(members.getUser(), "Hello <@!" + members.getId() + ">"); // Sends infinitely
        }
    }

SendPrivate ateMessage():

public void sendPrivateMessage(User user, String content) {
    user.openPrivateChannel()
            .flatMap(channel -> channel.sendMessage(content))
            .queue();
}

共有2个答案

拓拔野
2023-03-14

如果此代码在MessageReceivedEvent中执行,您可以尝试添加

if(event.getAuthor().isBot()){
return;
}

这样,如果你还没有回复,它就不会自动回复。(如果你想让它响应其他机器人程序,你也可以使用JDA,获取selfUser并检查该事件是否自行执行)如果不是这样,也许你可以告诉我们更多关于它何时执行的信息。

傅翰池
2023-03-14

你可以试试这个

public void sendPrivateMessage(User user, String content) {
    if (user.isBot()) return;

    user.openPrivateChannel()
        .flatMap(channel -> channel.sendMessage(content))
        .queue();
}
 类似资料:
  • 我的机器人不能发送嵌入或常规文本信息,代码执行,但没有什么是发送在不和谐的通道。我遵循了JDA维基的设置,我不知道我做错了什么。 机器人登录码

  • 我使用的是Simado GDT11调制解调器和丰富的USB到串行端口驱动程序。新连接出现在我的设备管理器中 我使用的是smslib示例中指定的基本类,但总有一些错误表明设备没有响应。由于使用USB端口,我添加了轮询参数,但没有效果。Commtest实用程序可以连接到同一个端口,所以我认为端口号不是问题。 Stacktrace: 代码:

  • 接口说明 轻推轻应用/订阅号支持发送文本、图片、文本卡片、图文、key-value、文件、待办等消息类型。本接口针对各种消息类型和发送的对象(单发、群发以及给部分人发送)进行了定义。 注:openid是用户关注某个轻应用/订阅号后生成的唯一id,单发和给部分人发送消息必须携带此参数,可以通过如下接口来获取: 根据qt_code获取用户基本信息 获取使用者列表 通过userId获取openid 消息

  • 主动发送消息 use EasyWeChat\Kernel\Messages\TextCard; // 获取 Messenger 实例 $messenger = $app->messenger; // 准备消息 $message = new TextCard([ 'title' => '你的请假单审批通过', 'description' => '单号:1928373, ...

  • 向已经创建连接凭据的设备发送消息数据。 请求方式: |4|2|3|message|\r 参数 message 发送的消息内容 返回值: "|4|2|3|1|\r" 发送成功 "|4|2|3|2|\r" 发送失败 Arduino样例: softSerial.print("|4|2|3|DFRobot|\r");

  • 我的代码如下:, 从服务器通知FCM(C#) 我对上述要求的答复 {"multicast_id":5002368547300,"成功": 1,"失败": 0,"canonical_ids": 0,"结果":[{"message_id":"0:14200031 c4rrr5787蛋"}]} 我假设一旦FCM收到新的通知,它将把这些通知推送到各自的Android设备。 但对我来说,它不起作用。