【问题标题】:pymongo find_one retruning None when used in discord.py command but working fine in terminalpymongo find_one reruning None 在 discord.py 命令中使用但在终端中工作正常
【发布时间】:2021-04-08 09:32:09
【问题描述】:

这是我要在我的收藏中搜索的文档。

{'_id': ObjectId('5fef0220e37ad50a37582bc1'), 'nationid': 176311, 'nation': 'Markovia', 'leader': 'Sam Cooper', 'continent': 'Africa', 'war_policy': 'Pirate', 'color': 'beige', 'alliance': 'Arrgh', 'allianceid': 913, 'allianceposition': 3, 'cities': 19, 'infrastructure': 11400, 'offensivewars': 0, 'defensivewars': 
0, 'score': 2283.09, 'rank': 10, 'vacmode': 0, 'minutessinceactive': 50, 'query_nation': 'markovia', 'query_leader': 'sam cooper'}

我有这个功能应该可以让我使用"nationid""query_nation""query_leader" 进行搜索:

def find_nation(nation):
    if nation.isnumeric():
        nation = int(nation)
        return db.nations.find_one({"nationid":nation})
    else:
        result = db.nations.find_one({"query_nation":nation.lower()})
        if result:
            return result
        else:
            return db.nations.find_one({"query_leader":nation.lower()})

当我搜索 176311markovia 时,此命令运行良好,但对于 sam cooper 返回 None

@client.command()
async def nation(ctx, nation):
    nation_dict_1 = find_nation(nation)
    if nation_dict_1:
        await ctx.send(f'{nation_dict_1["leader"]} of {nation_dict_1["nation"]}')
    else:
        await ctx.send('Could not find an exact match.')

但是,当我在终端中使用它时,它适用于所有 3 并且每次都打印文档。 (也有sam cooper

nation_dict_1 = find_nation(nation)
if nation_dict_1:
    print(nation_dict_1)
else:
    print('Could not find an exact match.')

【问题讨论】:

    标签: python python-3.x mongodb discord.py pymongo


    【解决方案1】:

    这是您的参数如何传递到命令中的问题。 sam cooper 由于中间的空间而无法工作。要解决此问题,您可以使用星号的“消耗休息”功能。

    试试这个,你重写的命令:

    @client.command()
    async def nation(ctx, *, nation):
        nation_dict_1 = find_nation(nation)
        if nation_dict_1:
            await ctx.send(f'{nation_dict_1["leader"]} of {nation_dict_1["nation"]}')
        else:
            await ctx.send('Could not find an exact match.')
    

    如果您这样做,您当前的命令将起作用:
    !nation "sam cooper"
    但是使用星号将允许您输入不带引号的参数。


    参考资料:

    【讨论】:

    • 啊该死的,我完全忘记了这个,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 2022-06-13
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多