get_cog не возвращает загруженный Cog, но None вместо - PullRequest
0 голосов
/ 19 апреля 2020

В моем боте у меня есть команда, которая просто распечатывает имена (и более поздние описания) всех загруженных винтиков. Для большинства из них он работает отлично, но, похоже, есть проблема с именем с именем 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 действительно загружена, это вывод print(bot.cogs):

{'General': <general.General object at [...]>, 'Misc': <misc.Misc object at [...]>, 'RNG': <rng.RNG object at [...]>}

Я знаю из документов, что None возвращается, когда Cog не найден, но, как я ясно вижу, CNG Rog очень загружен, и содержащиеся в нем команды работают нормально .

Теперь мне интересно, может ли это быть имя, но работа с ботом help RNG также отлично работает.

Есть ли способ заставить get_cog найти мой модуль ГСЧ

1 Ответ

2 голосов
/ 19 апреля 2020

Еще несколько описательных имен могут помочь вам увидеть, что происходит

for cog_name in cog_list:
    print(cog_name.title())

отпечатков

General
Misc
Rng

Обратите внимание, что RNG стало Rng. Это связано с тем, что строковый метод .title() создает строку Case Case, где каждое слово пишется с большой буквы. Итак, в вашем поиске вы ищете Rng и ожидаете, что он найдет RNG, что не работает, потому что поиск чувствителен к регистру.

...