我在 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)
所以我有一个命令(下面的代码)可以对具有特定角色和特定状态的成员执行 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)