【问题标题】:Two visibly exact strings are considered different两个明显精确的字符串被认为是不同的
【发布时间】:2018-01-21 02:58:25
【问题描述】:

使用我的机器人,您将输入两个输入,一个score 和一个username。这里的问题在于username。这是代码:

from discord.ext import commands

bot = commands.Bot(command_prefix='!', description="Moderates the server")


@bot.command(pass_context=True)
async def rate(stuff, score, username):
    user_scores = open("userratings.txt", "r")
    ratings = []
    with user_scores:
        for line in user_scores:
            newline = line.split("#")
            if newline[1].endswith("\n"):
                newline[1] = newline[1][:-1]
            ratings.append(newline)
    for item in ratings:
        item[1] = item[1].split()
    for item in ratings:
        await bot.say(item[0] + "#" + item[1][0] + " " + username)
        if username == item[0] + "#" + item[1][0]:
            await bot.say("HI")
            break


bot.run("token")

出于隐私原因,我当然不会透露令牌。问题出现在最后一个for 循环中的if 语句中,我将输入的用户名与使用item[0] + "#" + item[1][0] 稳定生成的用户名列表进行比较。我输入自己的用户名 (@Anthony (Tony's Farm)#3370),机器人输出相同的字符串,如下所示:

类似于您使用@username ping 此处的人,您使用服务器提供给您的@username#id_number ping 其他用户。如您所见,我的机器人不会说“嗨”,即使它能够完美地复制我的用户名和 ID。正如你之后看到的,我复制并粘贴了白色的字符,它 ping 我,因此两个字符串,一个由程序制作的和一个由我制作的,是相同的。

那么,即使我复制了机器人的输出,为什么两个明显准确的字符串却被认为是相同的?

编辑:我已尝试调试,但没有帮助:

【问题讨论】:

  • 您是否逐个字符地比较了字符串?因为如果 Python 说它们不相等,那么它们就不是。
  • @Tomalak 是的。我复制并粘贴了机器人输出的内容,当我输入它时,正如你在机器人之后的行中看到的那样,它 ping 我,这是不可能的,除非你有确切的字符串
  • 不能复制粘贴和目视检查。编写一个循环,将假设相等的两个字符串的两行字符代码输出到控制台。
  • @Tomalak 我刚做了,没有区别
  • 你又在比较字符了。比较字符代码以绝对确定。我怀疑空格差异。

标签: python-3.x equality discord


【解决方案1】:

Discord 的提及是通过<@User_ID> 完成的,因此您需要发送<@1957217385902874> 或类似的东西,而不是发送@Person

可以通过 server.get_member_named('Person#0001') 在 D.py 中按其名称获取成员对象,但这可能并不总是有效,因为人们可以更改其名称。

【讨论】:

    猜你喜欢
    • 2012-12-30
    • 2014-11-03
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多