Python 在discord.py中通过标记命令搜索用户
我试图执行一个命令,搜索与作者具有相同标记的用户,我试图很好地列出他们,但我正在运行一个Python 在discord.py中通过标记命令搜索用户,python,python-3.x,discord,discord.py,discord.py-rewrite,Python,Python 3.x,Discord,Discord.py,Discord.py Rewrite,我试图执行一个命令,搜索与作者具有相同标记的用户,我试图很好地列出他们,但我正在运行一个TypeError 我的代码是: @bot.command() async def tag(ctx, tag): tag1 = tag[1:] counter = 0 guild = ctx.guild for member in guild.members: if tag == member.discriminator or tag1 == member.di
TypeError
我的代码是:
@bot.command()
async def tag(ctx, tag):
tag1 = tag[1:]
counter = 0
guild = ctx.guild
for member in guild.members:
if tag == member.discriminator or tag1 == member.discriminator:
found = "\n".join([member.name for member in guild.members if tag1 == member.discriminator or tag == member.discriminator])
found2 = "\n".join([member.id for member in guild.members if tag1 == member.discriminator or tag == member.discriminator])
counter += 1
await ctx.send(f"{found} - {found2}")
return
错误是:命令引发异常:TypeError:sequence项0:预期的str实例,找到int
我知道导致错误的部分,但我不知道如何修复它,导致此错误的部分是:found2=“\n”.join([member.id for member in guild.members if tag1==member.discriminator或tag==member.discriminator])
任何帮助都将不胜感激。将
成员.id
更改为str
:
found2=“\n”.join([trag=member.discriminator或tag=member.discriminator时,guild.members中的成员的str(member.id)])
你的代码有不止一个问题,即使你让它运行,你也不会得到你想要的结果
函数参数 Discord将以下参数传递给命令函数:
async def command(Context, *Message)
第一个参数始终是Discord上下文,第二个(和后面的)参数是在命令之后编写的每个单词:
如果要编写.command,这是一个测试,Discord将传递以下参数:
Context, This, is, a, Test
在定义中的参数前添加*表示此参数包含所有剩余参数。因此,在本例中,*消息将收集(这是一个测试)
话虽如此,您的标记
参数除了捕获命令调用后编写的第一个单词外,不会做任何其他事情
如何获取作者的标签:
authorTag = ctx.author.discriminator
返回语句
在代码中,只要匹配1个人,就调用return语句。这将停止函数运行,意味着您只匹配具有相同标记的第一个人,之后的其他人将不会被检查
代码长度
试着写代码,不要超过80-100个字母。
这使它对您和其他人来说更具可读性。你不应该被迫向侧面滚动。当然,如果你认为没有其他办法,那就去做,但要尽量避免
你的代码没有达到你想要的效果
仔细阅读您的代码:
- 您可以创建一个for循环来检查每个成员
- 如果该成员与作者具有相同的标记,则继续
- 现在,制作一个包含公会所有成员姓名的列表
- 并制作一个包含公会所有成员id的列表
- 合并两个列表并发送它们,现在停止代码
我重写了代码,以实际匹配您想要做的事情(至少我希望如此):
@client.command()
async def tag(ctx):
authorTag = ctx.author.discriminator
guild = ctx.guild
sameTag = []
for member in guild.members:
if authorTag == member.discriminator and member != ctx.author:
sameTag.append(f"{member.name} - {str(member.discriminator)}")
if len(sameTag) == 0:
sameTag.append("No matches found")
await ctx.send("\n".join(sameTag))