无法记录齿轮,获取ExtensionNotFound

时间:2019-09-07 07:47:19

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

我不确定我是否在这里遗漏了一些东西,但是我的cogs文件夹中有一个无法加载的.py文件。一直给我错误```上面的异常是以下异常的直接原因:

discord.ext.commands.errors.ExtensionNotFound: Extension 'cogs.determineHit' could not be loaded.

以下是我的文件位置的图片: https://imgur.com/a/gBbX4lM

我也将在此处复制代码,以供您查看,但是由于它很长,因此会截取大部分代码。如果您需要更多信息,请告诉我。

import discord
import json
import random
import os
import time

from pathlib import Path
from threading import Timer
from discord.ext import commands
# from Roll_not_strike import *
# from Roll_true_strike import *
# from playerone_zero_current_hp import *
# from playertwo_zero_current_hp import *


def evasionTimer(self):
    pass

class Hit(commands.Cog):

    def __init__(self, client):
        self.client = client

    # Bulk of Code

def setup(client):
    client.add_cog(Hit(client))

该机器人的主要脚本为:

import discord
import os
from discord.ext import commands

token = open("token.txt", "r").read()

client = commands.Bot(command_prefix = '!')

@client.command()
async def load(ctx, extension):
    client.load_extension("cogs." + extension)

@client.command()
async def unload(ctx, extension):
    client.unload_extension("cogs." + extension)

for filename in os.listdir("./cogs"):
    if filename.endswith('.py'):
        client.load_extension("cogs." + filename[:-3])

client.run(token)

cogs文件夹中的其他所有cog都可以正常加载,如果我删除determineHit.py,我不确定这里缺少什么。任何帮助将不胜感激。

编辑:

在请求追溯请求之前,我开始考虑发生了什么,并得出结论,文件determineHit.py实际上并没有使用任何不和谐的命令。发生的是用户输入的命令与!roll不符,机器人发现!roll命令指向determineHit.py中的一种方法,其中所有计算均已完成(该文件中的代码为纯python ,什么都不需要调用discord命令),然后将这些数据返回给机器人,所有需要发送到聊天室的数据都存储在称为msg的字典中,然后有一个for循环以打印出所有必需的信息。

例如,在determineHit.py中,您可能会发现:

msg = []
msg.append("Hi Peoples!")
msg.append("Wow! You hit someone!")
msg.append("Aww! You missed!")
msg.append("These are Examples!)
return msg

回到机器人本身,它将解压缩msg并用for循环打印出其中存储的语句:

for msg_item in msg:
     await ctx.send(msg_item)

长话短说,我假设因为determineHit.py并没有使用discord库中的任何内容,因此它不必是齿轮,它可以在同一目录中的另一个文件夹中。

所以我做到了:

https://imgur.com/a/qM7v8E4

希望能解决我的问题。 (determineHit.py下的其他文件是相同的,它们只是包含计算之类的python文件,它们不调用任何ordord库中的任何方法。)

很明显,我错了。当我尝试使用from determineHit import *运行漫游器时,我得到了扩展错误,这开始了所有这一切。在没有上述操作的情况下运行它,然后bot启动,但显然无法运行该命令,因为它调用的方法不存在,因为它看不到determineHit.py

很抱歉,比您需要的罗than的多。但是无论如何...

我也进行了有人要求的回溯,并且得到了以下内容:

"C:\Users\arrae\PycharmProjects\Python Learning\venv\Scripts\python.exe" C:/Users/arrae/PycharmProjects/DiscordDiceGame/BotCommands.py
'Bot' object has no attribute 'load_extensions'
'Bot' object has no attribute 'load_extensions'
'Bot' object has no attribute 'load_extensions'
'Bot' object has no attribute 'load_extensions'
'Bot' object has no attribute 'load_extensions'
Bot is Online

提醒您,此操作是在之后完成的,我将determineHit.py从齿轮中移出,并将其放在“ gamelogic”文件夹中。

但是,如果确实有帮助,我将determineHit.py重新放到cogs文件夹中,并运行提供的相同追溯代码:

"C:\Users\arrae\PycharmProjects\Python Learning\venv\Scripts\python.exe" C:/Users/arrae/PycharmProjects/DiscordDiceGame/BotCommands.py
Traceback (most recent call last):
  File "C:\Users\arrae\PycharmProjects\Python Learning\venv\lib\site-packages\discord\ext\commands\bot.py", line 621, in load_extension
    lib = importlib.import_module(name)
  File "C:\Users\arrae\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "C:\Users\arrae\PycharmProjects\DiscordDiceGame\cogs\determineHit.py", line 10, in <module>
    from Roll_not_strike import *
ModuleNotFoundError: No module named 'Roll_not_strike'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:/Users/arrae/PycharmProjects/DiscordDiceGame/BotCommands.py", line 25, in <module>
    client.load_extension("cogs." + filename[:-3])
  File "C:\Users\arrae\PycharmProjects\Python Learning\venv\lib\site-packages\discord\ext\commands\bot.py", line 623, in load_extension
    raise errors.ExtensionNotFound(name, e) from e
discord.ext.commands.errors.ExtensionNotFound: Extension 'cogs.determineHit' could not be loaded.

对不起,如果我只是使事情变得更复杂。以为我找到了自己的答案。

1 个答案:

答案 0 :(得分:2)

我希望看到实际的回溯。

您可以创建字典,列出每个齿轮并查看是否有帮助。

async def on_ready():
    print('Bot is ready')

initial_extensions = (
   'cogs.charCreation',
   'cogs.charFeats',
   'cogs.charSheet',
   'cogs.gameCombat',
   'cogs.determineHit'
)

for extension in initial_extensions:
    try:
       client.load_extensions(extension)
    except Exception as e:
       print(e)    

来源:https://github.com/Rapptz/RoboDanny/blob/rewrite/bot.py

编辑:您需要在

之后将代码放在主文件右上方。
client = commands.Bot(command_prefix = '!')

将defineHit.py放入带有齿轮的文件夹中。

紧接着

import discord
import os
from discord.ext import commands

将以下行粘贴到主文件中

from gamelogic import onPRIUTil, playerone_zero_current_hp, playertwo_zero_current_hp, Roll_not_strike, Roll_true_strike