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

如何使用discord.Member.mobile_status?兼与is_on_mobile的区别及角色分配实现

解决方案:移动端用户加入语音频道触发角色分配与消息通知

一、discord.Member.mobile_status 与 discord.Member.is_on_mobile() 的区别

  • is_on_mobile():是一个实例方法,返回布尔值(True/False),直接判断该成员当前是否通过移动端在线。用法为member.is_on_mobile()。
  • mobile_status:是一个属性,返回discord.Status枚举值(如online、idle、offline等),仅表示成员在移动端的登录状态,而非是否正在使用移动端。若成员未在移动端登录,该值为offline。

二、功能实现代码修正

你的示例代码存在类属性调用错误、未监听语音事件、判断逻辑偏差等问题,以下是完整可运行的实现代码:

import discord
from discord.ext import commands

# 启用必要的意图
intents = discord.Intents.default()
intents.members = True
intents.voice_states = True

bot = commands.Bot(command_prefix="!", intents=intents)

# 替换为你服务器的实际ID
GUILD_ID = 1234567890
TARGET_ROLE_ID = 9876543210  # 要分配的角色ID
TARGET_TEXT_CHANNEL_ID = 1357924680  # 发送通知的文本频道ID

@bot.event
async def on_voice_state_update(member, before, after):
    # 判断用户是否刚加入语音频道(之前无频道,现在有频道)
    if before.channel is None and after.channel is not None:
        # 检查用户是否使用移动端
        if member.is_on_mobile():
            guild = bot.get_guild(GUILD_ID)
            target_role = guild.get_role(TARGET_ROLE_ID)
            target_channel = guild.get_channel(TARGET_TEXT_CHANNEL_ID)
            
            if target_role:
                await member.add_roles(target_role)
                if target_channel:
                    await target_channel.send(f"{member.name} 用移动端加入语音频道,已为其分配指定角色!")

bot.run("你的机器人令牌")

代码说明

  1. 意图配置:必须启用members和voice_states意图,否则无法监听语音状态变化和获取成员信息。
  2. 事件监听:通过on_voice_state_update事件捕捉用户语音频道的加入动作。
  3. 移动端验证:用member.is_on_mobile()精准判断用户当前的登录设备类型。
  4. 角色与消息操作:通过ID获取目标角色和文本频道,执行角色分配和通知发送。

三、注意事项

  • 确保机器人拥有管理角色和发送消息的服务器权限。
  • 代码中所有ID需替换为你服务器的实际数值。
  • 机器人令牌需妥善保管,禁止泄露。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:50:20