如何实现机器人转发或创建COD、彩虹六号围攻等游戏邀请?及解决转发时‘cannot send an empty message’问题
解答:Discord机器人转发/创建游戏邀请的问题
首先,你遇到的cannot send an empty message报错很好解决——游戏邀请消息本身没有文本内容(message.content为空),你的代码直接转发message.content就相当于发送空消息,自然会触发这个提示。我们先解决这个问题,再聊核心的游戏邀请处理方法。
一、转发游戏邀请的可行方案
Discord里的游戏邀请属于特殊的「活动消息」,存储在message.activity对象中,而不是普通文本内容。要转发这类邀请,你需要先识别消息是否为游戏邀请,再提取对应的邀请信息:
修正后的示例代码
import discord from discord import ActivityType @client.event async def on_message(message): if message.author == client.user: return # 识别游戏邀请消息 if message.activity and message.activity.type == ActivityType.invite: # 获取游戏应用ID和房间ID app_id = message.activity.application_id party_id = message.activity.party_id # 拉取游戏名称(可选) try: game_app = await client.fetch_application(app_id) game_name = game_app.name except: game_name = "未知游戏" # 构造游戏邀请链接(Discord通用格式) invite_link = f"https://discord.com/invite/{party_id}" # 发送格式化的邀请消息 await message.channel.send(f"📩 收到游戏邀请:**{game_name}**\n点击加入:{invite_link}") else: # 非邀请消息,仅当有文本内容时转发 if message.content.strip(): await message.channel.send(message.content) # 如果你需要转发图片/嵌入等其他内容,可以在这里添加处理逻辑
这段代码会自动识别游戏邀请消息,提取游戏名称和房间链接,彻底避免发送空消息的问题。
二、是否存在发送游戏邀请的通用方法?
分两种场景来看:
- 转发已有的邀请:通用可行,只要通过
message.activity识别邀请消息,就能提取信息转发,支持《COD》《彩虹六号:围攻》等所有集成Discord邀请功能的游戏。 - 机器人主动创建游戏邀请:目前没有通用方案,原因是:
- 游戏邀请本质绑定到玩家的游戏房间会话,机器人无法直接在游戏内创建房间,必须依赖游戏本身的Discord SDK集成。
- 像《COD》《彩虹六号》这类第三方游戏,并未开放让机器人直接创建邀请的API权限,机器人只能转发玩家手动发送的邀请。
三、针对《COD》《彩虹六号》的特殊说明
这两款游戏都完美支持Discord的邀请转发功能——只要玩家在游戏内发送Discord邀请,你的机器人就能通过上面的代码识别并转发。不需要额外的权限或特殊配置,只要机器人有对应频道的发送消息权限即可。
内容的提问来源于stack exchange,提问作者Zachicom
相关产品推荐
相关产品推荐

