2017-11-01 12 views
1

ある場合、私はdiscord.pyを使用して、私のボットのためのラッフルコマンドを記述しようとしていると、それはユーザーが抽選を開始するには、次のコマンドを実行することができますしたいのです:Discord.pyチェック入力がint

ラッフル時間の勝者!タイトルEG:!raffle 60 1 Pie

問題は、最初の2つの入力が数字で、タイトルが空白でないことを確認する検証を作成することです。現在、このコマンドのために、私が持っているコードです:

@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 

私は運を持っていないのですと、次のエラーを取得していますが:

Ignoring exception in command raffle 
Traceback (most recent call last): 
    File "C:\Users\kairj\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\bot.py", line 846, in process_commands 
    yield from command.invoke(ctx) 
    File "C:\Users\kairj\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 367, in invoke 
    yield from self.prepare(ctx) 
    File "C:\Users\kairj\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 345, in prepare 
    yield from self._parse_arguments(ctx) 
    File "C:\Users\kairj\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 304, in _parse_arguments 
    transformed = yield from self.transform(ctx, param) 
    File "C:\Users\kairj\AppData\Local\Programs\Python\Python36-32\lib\site-packages\discord\ext\commands\core.py", line 212, in transform 
    raise MissingRequiredArgument('{0.name} is a required argument that is missing.'.format(param)) 
discord.ext.commands.errors.MissingRequiredArgument: time is a required argument that is missing. 

私は確かにそのシンプルだとしてすべてのヘルプは素晴らしいことです間違いどこか!事前

+0

'時間だけである!= int'などは意味がありません。試してみて/それ以外は.. – roganjosh

+0

もう少し詳しく説明できますか?私は試してみた/例外が、それはどのようにコードに適合するかについて混乱している。 –

+0

私は私の電話にいるので、私は答えを書くことができません。しかし、あなたの現在のアプローチは、何かが組み込みのメソッドと等しいかどうかをチェックすることです。代わりに、try/exceptを使用して入力をintにキャストしようとします – roganjosh

答えて

0

のおかげではなくisinstanceを使用してみてください:あなたが定義されている何

if not isinstance(time, int) 
+0

現在の質問で空の文字列もチェックされます.... – roganjosh

+0

OPが実際に求めていることは分かりません。彼らはtry/exceptやassertionsを入力に使う必要があるようですが、エラーメッセージは、このraffle()以外の関数に必要な引数を入れていないように見えます。 –

+0

私が探しているのは、!ラッフルに続く3つの入力が有効かどうかをチェックする方法です。例えば、時間と勝者は整数であり、タイトルは空ではない。 –

0

は実際には2つのチェックです。 1つは、コマンドに3つの引数があることを確認することです。もう1つは、最初の2つがintであることを確認することです。

最初のものは実際にext.commandsによって内部的に処理されます。それを捕捉するには、on_command_errorイベントメソッドを定義する必要があります。第二は、@Luke McPukeが言ったようにint型を、チェックしている

@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 

if not isinstance(time, int) 
+0

あなたの返信ありがとうございます私はあなたが意味するものを得ると思います。私は今あなたの変更で次のコードを持っているが、まだ同じ問題が発生しています。私がちょうど!ラッフルを置くと、コンソールエラーが出て、私がラッフル6を置くと、私はそのステートメントのelse部分に送られます。 [CODE](https://pastebin.com/0MMFJUwi) –

関連する問題