Я создал бота Discord, который принимает команды, анализирует их с помощью модуля argparse и передает ответ обратно клиенту Discord.Тем не менее, я нахожусь в тупике, как вернуть ошибки клиенту.Вот код:
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import random
import asyncio
import argparse
client = discord.Client()
bot = commands.Bot(command_prefix='#')
#Tells you when the bot is ready.
@bot.event
async def on_ready():
print('Logged in as')
print(bot.user.name)
print(bot.user.id)
print('------')
#The bot listens in on every message.
@bot.event
async def on_message(message):
#New command beginning with # to make the bot say "Hello there!" Always remember to begin with # as you have specified the command prefix as # above.
if message.content.lower().startswith("#greet"):
userID = message.author.id
await bot.send_message(message.channel, "<@" + userID + ">" + " Hello there!")
#Another command that accepts parameters.
if message.content.lower().startswith("#say"):
args = message.content.split(" ") #This turns everything in the string after the command "#say" into a string.
await bot.send_message(message.channel, args[1:])
await bot.send_message(message.channel, " ".join(args[1:])) #This joins all the strings back without [] and commas.
#Another, more sophisticated command that accepts parameters parses them.
if message.content.lower().startswith("#example_function"):
args = message.content.split(" ")
#Pass arguments through argparse module.
parser = argparse.ArgumentParser(description="Example program that accepts input and parses them using argparse...")
parser.add_argument("var", nargs='?', type=int, default=10, help="This is an example variable...")
#Catch errors and pass them back to the client.
try:
#The variable "dict" is a DICTIONARY. You'll have to access each variable by calling attribute["variable"].
dict = vars(parser.parse_args(args[1:]))
await bot.send_message(message.channel, attribute["var"])
except SystemExit as e:
await bot.send_message(message.channel, e)
bot.run('...')
Приведенный выше код просто отправляет системную ошибку (которая равна 2) клиенту при печати сообщения об ошибке в командной строке - я действительно хочу обратного, чтобы сообщение об ошибкебыть отправлено клиенту.Как мне это сделать?