def on_command_error(error, ctx):
if isinstance(error, commands.NoPrivateMessage):
await bot.send_typing(ctx.message.author)
await asyncio.sleep(1)
await bot.send_message(ctx.message.author, "Um... this command can't be used in private messages.")
elif isinstance(error, commands.DisabledCommand):
await bot.send_typing(ctx.message.author)
await asyncio.sleep(1)
await bot.send_message(ctx.message.author, "I'm Sorry. This command is disabled and it can't be used.")
elif isinstance(error, commands.CommandInvokeError):
print('In {0.command.qualified_name}:'.format(ctx), file=sys.stderr)
traceback.print_tb(error.original.__traceback__)
print('{0.__class__.__name__}: {0}'.format(error.original), file=sys.stderr)
elif isinstance(error, commands.CommandNotFound):
log.info("'{0.message.author}' in {0.message.server} used a command thats not in Inkxbot, the content is resent here: '{0.message.content}'".format(ctx))
elif isinstance(error, commands.MissingRequiredArgument):
log.info("'{0.message.author}' in {0.message.server} was missing some arguments in a command, message is resent here: '{0.message.content}'".format(ctx))
await bot.send_typing(ctx.message.channel)
await asyncio.sleep(1)
await bot.send_message(ctx.message.channel, "It seems you are missing required argument(s). Try again if you have all the arguments needed.")
python类MissingRequiredArgument()的实例源码
def setup(bot):
"""Set up the cog."""
@bot.check
def is_human(ctx):
"""Prevent the bot from responding to other bots."""
if ctx.author.bot:
raise IsNotHuman("User is not human")
return True
@bot.listen("on_command_error")
async def handle_error(ctx, exc):
"""Simple error handler."""
if isinstance(exc, commands.MissingRequiredArgument):
param = exc.param.replace("_", " ")
await ctx.send(f"Please specify a {param} for this command to work.")
elif not isinstance(exc, (commands.CommandNotFound, IsNotHuman)):
await ctx.send(exc)
def on_command_error(ctx, error):
if isinstance(error, commands.NoPrivateMessage):
await ctx.send(content='This command cannot be used in private messages.')
elif isinstance(error, commands.DisabledCommand):
await ctx.send(content='This command is disabled and cannot be used.')
elif isinstance(error, commands.MissingRequiredArgument):
await bot.formatter.format_help_for(ctx, ctx.command, "You are missing required arguments.")
elif isinstance(error, commands.CommandNotFound):
# await ctx.send('Command not found. (I\'m working on fixing cmd_not_found forf help module')
await bot.formatter.format_help_for(ctx, [c for c in bot.commands if 'help' == c.name][0],
"Command not found.")
elif isinstance(error, commands.CommandInvokeError):
print('In {0.command.qualified_name}:'.format(ctx), file=sys.stderr)
print('{0.__class__.__name__}: {0}'.format(error.original), file=sys.stderr)
traceback.print_tb(error.__traceback__, file=sys.stderr)
log.error('In {0.command.qualified_name}:'.format(ctx))
log.error('{0.__class__.__name__}: {0}'.format(error.original))
else:
traceback.print_tb(error.__traceback__, file=sys.stderr)
def on_command_error(self, error, ctx):
if isinstance(error, commands.NoPrivateMessage):
await self.send_message(ctx.message.author, "\N{WARNING SIGN} Sorry, you can't use this command in a private message!")
elif isinstance(error, commands.DisabledCommand):
await self.send_message(ctx.message.author, "\N{WARNING SIGN} Sorry, this command is disabled!")
elif isinstance(error, commands.CommandOnCooldown):
await self.send_message(ctx.message.channel, f"{ctx.message.author.mention} slow down! Try again in {error.retry_after:.1f} seconds.")
elif isinstance(error, commands.MissingRequiredArgument) or isinstance(error, commands.BadArgument):
await self.send_message(ctx.message.channel, f"\N{WARNING SIGN} {error}")
elif isinstance(error, commands.CommandInvokeError):
original_name = error.original.__class__.__name__
print(f"In {paint(ctx.command.qualified_name, 'b_red')}:")
traceback.print_tb(error.original.__traceback__)
print(f"{paint(original_name, 'red')}: {error.original}")
else:
print(f"{paint(type(error).__name__, 'b_red')}: {error}")
def on_command_error(self, ctx, error):
"""Error handling"""
error_msg = None
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send(error)
elif isinstance(error, commands.CommandNotFound):
pass
elif isinstance(error, commands.CommandInvokeError):
original = error.original
if isinstance(original, discord.Forbidden):
await ctx.send("I need to have the 'embed links' permission to send messages!")
return
elif isinstance(original, exceptions.Halt):
return
print('{0.created_at}: {0.author}: {0.content}'.format(ctx.message))
print(error)
embed = discord.Embed(title="An unexpected error occured :I", colour=0xCA0147,
description="If you feel like this shouldn't be happening [click here to join my support server](https://discord.gg/UP4TwFX).")
await ctx.send("", embed=embed)
else:
print('{0.created_at}: {0.author}: {0.content}'.format(ctx.message))
print(str(error))
def on_command_error(error, ctx):
channel = ctx.message.channel
if isinstance(error, commands.MissingRequiredArgument):
await bot.send_cmd_help(ctx)
elif isinstance(error, commands.BadArgument):
await bot.send_message(channel, "Truly, your wish is my command, but I cannot make head nor tail of the argument you provide.")
elif isinstance(error, commands.CommandNotFound):
# This is almost as ugly as Manta on Medusa
await bot.send_message(channel, "I fear I know not of this \"%s\". Is it perchance a new Hero?" % ctx.message.content[len(bot.settings["prefix"]):].partition(' ')[0])
elif isinstance(error, commands.CommandOnCooldown):
await bot.send_message(channel, random.choice(CDMESSAGES) + " (%ss remaining)" % int(error.retry_after))
elif isinstance(error, commands.NoPrivateMessage):
await bot.send_message(channel, "Truly, your wish is my command, but that order is not to be issued in secret. It must be invoked in a server.")
else:
try:
await bot.send_message(channel, "I fear some unprecedented disaster has occurred which I cannot myself resolve. Methinks you would do well to consult %s on this matter." % (await bot.get_owner()).mention)
except discord.NotFound:
await bot.send_message(channel, "I fear some unprecedented disaster has occurred which I cannot myself resolve.")
if isinstance(error, commands.CommandInvokeError):
print(repr(error.original))
else:
print(repr(error))
def on_command_error(self,ctx,error):
if self.bot.user.id == 181503794532581376 or self.error_log:
print(error)
if isinstance(error, commands.MissingRequiredArgument):
await self.send_cmd_help(ctx)
elif isinstance(error,commands.BadArgument):
await self.send_cmd_help(ctx)
elif isinstance(error, commands.CommandInvokeError):
if isinstance(error.original,discord_error.Forbidden):
await ctx.send("I am sorry, I need a certain permission to run it...")
traceback.print_exception(type(error), error, error.__traceback__)
return utils.prRed(type(error.original))
errors = traceback.format_exception(type(error), error, error.__traceback__)
Current_Time = datetime.datetime.utcnow().strftime("%b/%d/%Y %H:%M:%S UTC")
utils.prRed(Current_Time)
utils.prRed("Error!")
traceback.print_exception(type(error), error, error.__traceback__)
cog_error = '```fix\nCogs:{0.command.cog_name}\tCommand:{0.command}\tAuthor:{0.message.author}-{0.message.author.id}\n' \
'Server:{0.message.guild.id}\n{0.message.clean_content}\nError:\n{1}```'.format(ctx,error)
msg ="```py\n{}```\n{}\n```py\n{}\n```".format(Current_Time + "\n"+ "ERROR!",cog_error,"".join(errors).replace("`",""))
if len(msg) >= 1900:
msg = await utils.send_hastebin(msg)
await self.bot.owner.send(msg)
await ctx.send("You either used the command incorrectly or an unexpected error occurred. A report has been sent to the creator so you can hope for a fix soon.")
def playlist_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('You need to pass in a playlist name.')
else:
await self.bot.say(error)
def setclass_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
await manager.say("Oops! You didn't include your Destiny 2 class.")
await manager.clear()
def settimezone_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
await manager.say("Oops! You didn't include your timezone.")
await manager.clear()
def feedback_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
await manager.say("You forgot to include your feedback!")
await manager.clear()
def setprefix_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
await manager.say("Oops! You didn't provide a new prefix.")
await manager.clear()
def seteventrole_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
event_role = get_event_role(self.bot, ctx.guild)
if not event_role:
role_display = 'None (anyone can make events)'
else:
role_display = format_role_name(event_role)
await manager.say("The current event role is: **{}**\n\n".format(role_display)
+ "To change the event role, use '{}settings seteventrole <role_name>'".format(ctx.prefix))
await manager.clear()
def item_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
await manager.say("Oops! You didn't specify a search term.")
await manager.clear()
def on_command_error(self, ctx, error):
"""Command error handler"""
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
if isinstance(error, commands.CommandNotFound):
pass
elif isinstance(error, commands.MissingRequiredArgument):
pass
elif isinstance(error, commands.NotOwner):
pass
elif isinstance(error, commands.NoPrivateMessage):
await manager.say("You can't use that command in a private message", mention=False)
elif isinstance(error, commands.CheckFailure):
await manager.say("You don't have the required permissions to do that")
elif isinstance(error, commands.CommandOnCooldown):
await manager.say(error)
elif isinstance(error, commands.CommandInvokeError):
if isinstance(error.original, discord.errors.Forbidden):
pass
else:
raise error
else:
raise error
await manager.clear()
def search_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say("You didn't put info in!")
def on_command_error(e, ctx):
if isinstance(e, commands.MissingRequiredArgument):
await send_cmd_help(ctx)
elif isinstance(e, commands.BadArgument):
await send_cmd_help(ctx)
else:
raise(e)
def on_command_error(self, ctx, err):
if isinstance(err, errors.PermissionDenied):
await ctx.send('BAKA! You do not have my permission!')
elif isinstance(err, errors.MissingPermissions):
await ctx.send('BAKA! I require these permissions: %s' % ', '.join(err.args))
elif isinstance(err, commands.NoPrivateMessage):
await ctx.send('BAKA! This command does not work in private messages!')
elif isinstance(err, commands.BadArgument):
str_err = str(err)
if not str_err.endswith(('.', '!')):
str_err += '.'
await ctx.send('BAKA! %s' % str_err)
elif isinstance(err, commands.MissingRequiredArgument):
await ctx.send('BAKA! Missing required argument: `%s`' % err.args[0].partition(' ')[0])
elif isinstance(err, commands.TooManyArguments):
await ctx.send('BAKA! Too many arguments!')
elif isinstance(err, commands.CommandNotFound):
pass
else:
await ctx.send('```\n%s\n```' % ''.join(traceback.format_exception_only(type(err), err)).strip())
if isinstance(ctx.channel, discord.TextChannel):
log.error('Error in command <{0}> ({1.name!r}({1.id}) {2}({2.id}) {3}({3.id}) {4!r})'.format(ctx.command, ctx.guild, ctx.channel, ctx.author, ctx.message.content))
else:
log.error('Error in command <{0}> (DM {1}({1.id}) {2!r})'.format(ctx.command, ctx.channel.recipient, ctx.message.content))
log.error(''.join(traceback.format_exception(type(err), err, err.__traceback__)))
def on_command_error(error, ctx):
if isinstance(error, commands.NoPrivateMessage):
await bot.send_message(ctx.message.author, 'This command cannot be used in private messages.')
elif isinstance(error, commands.DisabledCommand):
await bot.send_message(ctx.message.author, 'Sorry. This command is disabled and cannot be used.')
elif isinstance(error, commands.MissingRequiredArgument):
command = ctx.message.content.split()[1]
await bot.send_message(ctx.message.channel, "Missing an argument: try gsbot help or gsbot help " + command)
elif isinstance(error, commands.CommandNotFound):
await bot.send_message(ctx.message.channel, codify("I don't know that command: try gsbot help"))
def on_command_error(self, ctx, error):
if isinstance(error, commands.CheckFailure) and await self.is_owner(ctx.author):
# There is actually a race here. When this command is invoked the
# first time, it's wrapped in a context manager that automatically
# starts and closes a DB session.
#
# The issue is that this event is dispatched, which means during the
# first invoke, it creates a task for this and goes on with its day.
# The problem is that it doesn't wait for this event, meaning it might
# accidentally close the session before or during this command's
# reinvoke.
#
# This solution is dirty but since I'm only doing it once here
# it's fine. Besides it works anyway.
while ctx.session:
await asyncio.sleep(0)
try:
async with ctx.acquire():
await ctx.reinvoke()
except Exception as exc:
await ctx.command.dispatch_error(ctx, exc)
return
# command_counter['failed'] += 0 sets the 'failed' key. We don't want that.
if not isinstance(error, commands.CommandNotFound):
self.command_counter['failed'] += 1
cause = error.__cause__
if isinstance(error, errors.ChiakiException):
await ctx.send(str(error))
elif type(error) is commands.BadArgument:
await ctx.send(str(cause or error))
elif isinstance(error, commands.NoPrivateMessage):
await ctx.send('This command cannot be used in private messages.')
elif isinstance(error, commands.MissingRequiredArgument):
await ctx.send(f'This command ({ctx.command}) needs another parameter ({error.param})')
elif isinstance(error, commands.CommandInvokeError):
print(f'In {ctx.command.qualified_name}:', file=sys.stderr)
traceback.print_tb(error.original.__traceback__)
print(f'{error.__class__.__name__}: {error}'.format(error), file=sys.stderr)
def on_endvote_error(self, exception, ctx):
if isinstance(exception, MissingRequiredArgument()):
await self.bot.send_message(ctx.message.channel, "Oops, I need a message id to end the vote")
def on_greeting_error(self, exception, ctx):
if isinstance(exception, MissingRequiredArgument):
await self.bot.send_message(ctx.message.channel, "Oops, you need to specify `on` or `off`")
def tag_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('You need to pass in a tag name.')
def info_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('Missing tag name to get info of.')
def search_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('Missing query to search for.')
def tag_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('You need to pass in a tag name.')
def info_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('Missing tag name to get info of.')
def search_error(self, error, ctx):
if isinstance(error, commands.MissingRequiredArgument):
await self.bot.say('Missing query to search for.')
def coinflip_error(self, ctx, error):
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send("Input please?")
def load_error(ctx, error):
"""Handle load's errors"""
if isinstance(error, commands.MissingRequiredArgument):
await ctx.send(f"Usage: {prefix}load(<extension name>).")
if isinstance(error, commands.errors.CommandInvokeError):
await ctx.send("Module not found.")
if isinstance(error, commands.errors.NotOwner):
await ctx.send("You're not my daddy, only daddy can use this function.")