发出实现组(invoked_subcommand总是返回None)

时间:2018-03-23 04:01:13

标签: discord discord.py

我的(非常令人震惊,虽然希望这不会成为问题)在一个运行Discord.py的discord bot上的quotebot cog的代码遇到了一些问题。我过去曾经尝试过实施团队的问题很多,而且我以前总是放弃,但是这次我想做正确的事情,因为代码刚刚变得笨重。但问题是,我真的不知道自己在做什么。到目前为止我的代码:

import discord
import asyncio
from discord.ext import commands
import json
from . import utils
import random
import math

"""Module containing all you need for a quote bot"""

data = utils.load_json("quotes")

maxID = data["maxID"]

temp = data["quotes"]
quotes = []

curPage = 0

class Quote:
    def __init__(self, id, msg):
        self.id = id
        self.msg = msg

for i in range(0, len(temp[0])):
    quotes.append(Quote(temp[1][i], temp[0][i]))

class Quotes():

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

    #All the "Quote" commands
    @commands.group(pass_context=True)
    async def quote(self, ctx, arg):
        print(ctx.message.content)
        if ctx.invoked_subcommand == None:
            global quotes
            global maxID

            try:
                if int(arg) <= maxID and int(arg) >= 1:
                    b = None
                    for s in quotes:
                        if int(arg) - 1 == s.id:
                            b = s
                            break

                    if (b == None):
                        await ctx.channel.send('No quote with this ID')
                        return
                    await ctx.channel.send('`Quote ' + str(int(arg)) +':` ' + str(b.msg))
                else:
                    await ctx.channel.send('No quote with this ID')
            except:
                await ctx.channel.send('Invalid input')

    @quote.command(pass_context=True)
    async def add(self, ctx, *args):
        global maxID
        global quotes

        quotes.append(Quote(maxID, s))
        maxID += 1
        await ctx.channel.send('`Added Quote ID: ' + str(maxID) + '`')

    @quote.command(pass_context=True)
    async def list(self, ctx):
        global quotes

        try:
            m = []
            for q in quotes:
                m.append(q.msg + " | id = " + str(q.id + 1))
            pages = utils.Pages(self.bot, message=ctx.message, entries=m, per_page=15)
            await pages.paginate(start_page=1)
        except utils.CannotPaginate as e:
            print(e)

    @quote.command(pass_context=True)
    async def random(self, ctx):
        global quotes

        i = random.randint(0,len(quotes) - 1)
        await ctx.channel.send('`Quote ' + str(quotes[i].id) +':` ' + str(quotes[i].msg))

    @quote.command(pass_context=True)
    async def remove(self, ctx, arg):
        global quotes
        global maxID

        try:
            i = int(arg) - 1
            if i < maxID and i >= 0:
                b = None
                for s in quotes:
                    if i == s.id:
                        b = s
                        break

                if b != None:
                    quotes.remove(b)
                    await ctx.channel.send('`Removed Quote ID: ' + str(i + 1) + '`')
                else:
                    await ctx.channel.send('No quote with this ID')
            else:
                await ctx.channel.send('No quote with this ID')
        except ValueError as e:
            await ctx.channel.send('Invalid input')

    def __unload():
        global quotes
        global maxID

        out = [[0 for x in range(len(quotes))] for y in range(2)]
        for i in range(0, len(quotes)):
            out[0][i] = quotes[i].msg
            out[1][i] = quotes[i].id

        data["quotes"] = out
        data["maxID"] = maxID

        utils.save_json(data, "quotes")
        utils.save_json(data, "Backups\quotes_backup")

def setup(bot):
    bot.add_cog(Quotes(bot))

这个破解密码的垃圾代码是我的引用机器人。在我开始将它们移动到一个组之前,我至少可以将命令运行得很好,因此知道的很多。问题是在父函数quote()中,ctx.invoked_subcommand似乎总是返回None。我不知道我是否遗漏了什么或者我做错了什么,但我给机器人的确切输入是“ - &gt;引用列表”,据我所知,这应该是正确的。最后要注意的是,根据内置帮助,它确实将Quote识别为一个组,当我执行“ - &gt;帮助引用”时,它会提供适当的帮助结构。提前谢谢你,我确定这里的问题不是太难,我只是遗漏了一些明显的东西。

1 个答案:

答案 0 :(得分:1)

正如Patrick Haugh所评论的那样,您的子命令将被传递到您的arg参数中。从arg移除async def quote(self, ctx, arg):,它应该可以正常工作

(如果这有帮助,请给他的评论一个upvote)