【发布时间】:2020-04-19 13:39:21
【问题描述】:
在我的机器人中,我有一个命令,它只打印出所有加载的 cog 的名称(以及后来的描述)。
对于他们中的大多数人来说,它工作得非常好,但它似乎有一个名为 RNG 的问题
for c in bot.cogs:
if c is None:
continue
else:
cog_list.append(c)
cog_list = sorted(cog_list)
print(cog_list)
>>> ['General', 'Misc', 'RNG']` # (all loaded cogs, so this is correct)
for cog in cog_list:
cog = bot.get_cog(cog.title())
print(cog)
>>> <general.General object at [...]> # 'General' cog
>>> <misc.Misc object at [...]> # 'Misc' cog
>>> None # 'RNG' cog, but it's not found?
# (expected <rng.RNG object at [...]>)
只是为了显示 RNG cog 实际已加载,这是print(bot.cogs) 的输出:
{'General': <general.General object at [...]>, 'Misc': <misc.Misc object at [...]>, 'RNG': <rng.RNG object at [...]>}
我从文档中知道,当找不到 cog 时会返回 None,但我可以清楚地看到,RNG cog 已加载很多并且包含的命令工作正常。
现在我想知道它是否可能是名称,但对机器人执行 help RNG 也可以正常工作。
有没有办法让get_cog找到我的RNG模块?
【问题讨论】:
-
bot.cogs返回一个对象字典,其中也包含RNG模块,为什么不直接使用它而不是尝试再次获取 cog(使用名称)?这种方法也会使您的代码更加健壮。 -
我没有意识到我可以直接以这种方式使用它,但我也希望模块名称按字母顺序排序,并采用我已经熟悉的这种迂回方式。但你说得对,直接使用
bot.cogs更有意义!非常感谢!