命令引发了一个异常。AttributeError: 'Command'对象没有属性'subreddit' Discord.PY。

问题描述 投票:1回答:1
@client.command()
async def reddit(ctx):
    memes_submissions = reddit.subreddit('memes').hot()
    post_to_pick = random.randint(1, 10)
    for i in range(0, post_to_pick):
        submission = next(x for x in memes_submissions if not x.stickied)

    await ctx.send(submission.url)

这是我的代码。当我输入 .reddit 它应该找到一个随机的热备忘录 从rmemes。而不是给我一些新鲜的备忘录,它给我一个错误。

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Command' object has no attribute 'subreddit'

据我所知,程序不知道什么是subreddit。但我认为它应该从PRAW中获取subreddit命令。我是这样定义的 reddit:

reddit = praw.Reddit(client_id="id",
                 client_secret="secret",
                 user_agent="MASTERBOT")

我在想,可能是因为我写的东西或者定义的原因吧 user_agent 因为我不知道这有什么用。我把所有的东西都按照它们应该的样子导入了。每个人的代码似乎都在工作。可能是我的Python出了问题?我在3.8上运行。

python discord.py discord.py-rewrite praw
1个回答
2
投票

同样的问题在你的命名空间中又发生了--你调用了你的命令 reddit 即使你已经创建了你的 reddit 命令外的变量。

试着重命名它。

reddit = praw.Reddit(client_id="id", ....)

@client.command(name="reddit") # this is what the command will be in discord
async def _reddit(ctx):
    memes_submissions = reddit.subreddit('memes').hot()
    post_to_pick = random.randint(1, 10)
    for i in range(0, post_to_pick):
        submission = next(x for x in memes_submissions if not x.stickied)

    await ctx.send(submission.url)

你已经有了你的变量 reddit 在这里定义。

reddit = praw.Reddit(...)

所以,如果有一个函数定义成这样

async def reddit(...):

将会影射你在外面定义的变量, 如果你试图引用到 reddit 在函数中,它实际上是在查看 async def reddit(...): 而不是 reddit = praw.Reddit(...)因为它是变量的最新定义。

© www.soinside.com 2019 - 2024. All rights reserved.