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))