我在 ping 在线用户的命令上遇到了麻烦

Im getting troubles with my command of pinging online people

所以我有一个命令(下面的代码)可以对具有特定角色和特定状态的成员执行 ping 操作。一周前它还在工作,但我认为 discord.py 已更新,我不能再使用该格式了。

旧代码:

@client.command()
async def moderator(ctx, *, arg):
    role = discord.utils.get(ctx.guild.roles, id=role_id)
    online = (member for member in role.members if member.status == discord.Status.online or discord.Status.idle)
    for member in online:
        await member.send(f'{member.mention} Moderator Requested by {ctx.author} Reason: {arg}')

我希望你能帮助我。

在新的更新中,他们将一些意图默认更改为 False,您需要自己激活它才能访问成员和状态。

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
intents.presences = True

bot: commands.Bot = commands.Bot(
    intents=intents,
    ## and any other key word argument you have like prefix or ...
)

文件:

https://discordpy.readthedocs.io/en/latest/intents.html?highlight=intents https://discordpy.readthedocs.io/en/latest/api.html?highlight=intents#discord.Intents


我注意到您的检查存在逻辑错误:

    online = (member for member in role.members if member.status == discord.Status.online or discord.Status.idle)

更具体:

if member.status == discord.Status.online or discord.Status.idle

与这一行相同:

if (member.status == discord.Status.online) or discord.Status.idle

因为 discord.Status.idle 总是 True 作为一个条件,这个条件总是 True 这是您要检查的条件:

if member.status in (discord.Status.online, discord.Status.idle)