邀请Discord bot加入服务器后如何自动获取guild_id与default_channel_id
解决方法
你不需要提前手动查询、硬编码guild_id和频道ID,on_member_join事件的入参已经携带了所需的全部上下文信息,直接调用对应属性即可。
优化后的实现代码
@bot.event async def on_member_join(member): # 直接从成员对象获取所属服务器实例,无需传入guild_id guild = member.guild # 获取服务器默认系统通知频道(新人加入提示默认发送的频道) channel = guild.system_channel # 兼容未设置系统频道的场景:遍历找第一个Bot有发消息权限的文字频道 if not channel: for ch in guild.text_channels: if ch.permissions_for(guild.me).send_messages: channel = ch break # 后续业务逻辑 if channel: await channel.send(f"欢迎 {member.mention} 加入服务器!")
原理解释
on_member_join的入参member是新加入用户的实例对象,本身已经绑定了所属服务器的属性,直接调用.guild就能拿到对应Guild实例,无需调用get_guild传入提前获取的guild_id- 服务器的默认系统频道可以直接通过Guild实例的
.system_channel属性获取,无需提前查询频道ID硬编码传入get_channel - 如果服务器没有设置系统频道,或者Bot没有系统频道的发消息权限,可以遍历服务器的文字频道列表,筛选第一个符合发消息权限的频道使用即可
内容的提问来源于stack exchange,提问作者ilikerubikscubes
相关产品推荐
相关产品推荐

