Есть ли синтаксический анализатор аргументов команды для Discord.py, похожий на модуль 'argparse'?Я создал бот-диск, который принимает 2 целых числа и 1 строковую переменную, обрабатывает их и выводит результат клиенту.Это хорошо, когда пользователи используют его правильно, но когда им это не нужно, мне нужен простой способ передать клиенту ошибки, чтобы сообщить пользователю, что они неправильно использовали команду.Было бы здорово, если бы я мог использовать argparse для этого, иначе мне придется написать парсер с нуля - это было бы больно!Вот код:
import discord
from discord.ext import commands
from discord.ext.commands import Bot
import random
import asyncio
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("#compton_scatter_eq"):
args = message.content.split(" ")
a = int(args[1])
b = int(args[2])
c = args[3]
result = str(a + b) + c
await bot.send_message(message.channel, result)
bot.run(...)
Подскажите, пожалуйста, есть ли модуль, похожий на argparse, или есть способ использовать модуль argparse с Discord.py?
Редактировать:
@ Rishav - ты классный чувак!Это сработало, но теперь у меня появилась новая проблема.Вот мой код:
#Another, more sophisticated command that accepts parameters parses them.
if message.content.lower().startswith("#compton_scatter_eq"):
args = message.content.split(" ")
#Pass arguments through argparse module.
parser = argparse.ArgumentParser(description="Example program to get my bot to use argparse")
parser.add_argument("a", nargs='?', type=int, default=10, help="This is your first variable.")
parser.add_argument("b", nargs='?', type=int, default=10, help="This is your second variable.")
parser.add_argument("c", nargs='?', type=str, default="East", help="This is your third variable.")
#Catch errors and pass them back to the client.
try:
await bot.send_message(message.channel, vars(parser.parse_args(args[1:])))
except BaseException as e:
await bot.send_message(message.channel, str(e))
К сожалению, ошибки появляются в терминале командной строки, но не в клиенте.Как передать ошибку обратно клиенту?И как мне получить доступ к переменным a, b и c?Спасибо за вашу помощь!