You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telegram Kotlin机器人无法接收表情消息反应问题

解决Telegram机器人无法接收消息表情反应的问题

问题原因

默认情况下,telegrambots-spring-boot-starter不会自动订阅message_reaction类型的更新,所以你的onUpdateReceived方法无法接收到表情反应的事件通知。

解决步骤

1. 开启消息反应更新权限

在Spring Boot配置文件(如application.properties)中添加以下配置,让机器人同时订阅消息和消息反应更新:

telegrambots.allowed-updates=message,message_reaction

如果是通过代码初始化机器人,也可以在机器人类中手动声明允许的更新类型:

override fun getBotToken(): String {
    return "你的机器人Token"
}

override fun getBotUsername(): String {
    return "你的机器人用户名"
}

override fun getAllowedUpdates(): MutableList<String> {
    return mutableListOf("message", "message_reaction")
}

2. 修改onUpdateReceived方法处理表情反应

更新方法逻辑,识别消息反应事件,检查目标表情后执行删除操作:

override fun onUpdateReceived(update: Update) {
    // 保留原有普通消息处理逻辑
    if (update.hasMessage()) {
        println("收到消息!")
        // 你的消息处理代码
    }

    // 新增消息反应处理逻辑
    if (update.hasMessageReaction()) {
        val reactionUpdate = update.messageReaction
        val chatId = reactionUpdate.chatId
        val messageId = reactionUpdate.messageId
        val reactions = reactionUpdate.reactions

        // 示例:判断是否包含指定删除表情🗑️(可替换为你需要的表情)
        val hasTargetReaction = reactions.any { it.emoji == "🗑️" }

        if (hasTargetReaction) {
            try {
                // 调用Telegram API删除对应消息
                execute(DeleteMessage(chatId, messageId))
                println("已删除消息ID: $messageId")
            } catch (e: TelegramApiException) {
                e.printStackTrace()
            }
        }
    }
}

注意事项

  • 确保机器人在目标聊天中拥有管理员权限,且具备删除消息的权限
  • 表情字符串需与Telegram传递的完全一致,避免因编码或表情变体导致判断失败

内容的提问来源于stack exchange,提问作者Eugene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:23:19