我正在尝试使用discord.py为我的机器人编写一个抽奖命令,并希望用户可以执行以下命令来启动抽奖:
!抽奖时间获奖者名称EG:!抽奖60 1 Pie
我遇到的问题是创建验证以检查前两个输入是否为数字且标题不是空白。目前这是我对该命令的代码:
import zmq
import time
# ZeroMQ Context
context = zmq.Context()
# Define the socket using the "Context"
sock = context.socket(zmq.PUSH)
sock.bind("tcp://127.0.0.1:5690")
id = 0
while True:
time.sleep(1)
id, now = id+1, time.ctime()
# Message [id] - [message]
message = "{id} - {time}".format(id=id, time=now)
sock.send(message)
print "Sent: {msg}".format(msg=message)
但是我没有运气并且收到以下错误:
@bot.command(pass_context=True)
async def raffle(ctx, time, winners, title):
if time != int or winners != int or title != "":
await bot.say("{} raffle has been started for {} seconds and there will be {} winner(s)!".format(title, time, winners))
else:
await bot.say("Seems you went wrong! Raffle format is: !raffle time winners title")
return
任何帮助都会很棒,因为我确信这是一个简单的错误!
提前致谢
答案 0 :(得分:0)
请尝试使用isinstance
:
if not isinstance(time, int)
答案 1 :(得分:0)
您所定义的实际上是两次检查。第一个是你要确保你的命令有3个参数,第二个是确保前两个是int。
第一个实际上是由内部的ext.commands处理的。要捕获它,您需要定义on_command_error
事件方法。
@bot.event
def on_command_error(exc, ctx):
if isinstance(exc, commands.errors.MissingRequiredArgument):
# Send a message here
return
# If nothing is caught, reraise the error so that it goes to console.
raise exc
第二个是检查整数,正如@Luke McPuke所说的那样只是
if not isinstance(time, int)