python - massping 命令 - discord.py
问题描述
我正在尝试创建一个命令,从服务器获取 5 个随机人并提及他们。我到目前为止是这样的:
@bot.command()
async def massping(ctx):
await ctx.message.delete()
user = choice(ctx.message.channel.guild.members)
user2 = choice(ctx.message.channel.guild.members)
user3 = choice(ctx.message.channel.guild.members)
user4 = choice(ctx.message.channel.guild.members)
user5 = choice(ctx.message.channel.guild.members)
message = await ctx.send(f'{user.mention}{user2.mention}{user3.mention}{user4.mention}{user5.mention}')
await message.delete()
这样做的问题是,有时它会 ping 同一个人两次。有什么办法可以解决这个问题,所以我可以确保它总是 ping 5 个不同的人?
任何帮助表示赞赏。
解决方案
Guild.members
返回成员对象的列表,您可以使用random.sample
它从列表中返回唯一元素。
async def ping(ctx, num: int):
members = [m.mention for m in ctx.guild.members]
rand = random.sample(members, num)
await ctx.send("\n".join(rand))
推荐阅读
- typescript - 基于类型参数增强对象属性的类型
- java - 哈希表遍历顺序
- java - 是否可以在 Java 上实现自己的 AtomicInteger?(jdk.internal.misc.不安全)
- python - 在 SUMO 中获取错误的速度值
- multiple-columns - Power Query 无法将选项卡识别为代码中 .txt 文件中的分隔符
- c++ - C++Mutex 和条件变量解锁/同步
- amazon-web-services - 为什么我在 AWS Cognito 服务中看不到用户自定义属性
- virtual-machine - 全屏在 vmware 中不起作用(ubuntu 16.04 LTS)
- mysql - 发布到 IIS 服务器后,带有 MySql 的 ASP.NET Identity 问题
- html - 如何在水平对齐的 ul 中垂直对齐父级及其子级?