2016-11-19 6 views
2

私はPythonを新しく導入しましたが、プログラミングには新しくありません。基本的には、IRCチャンネルからのユーザー入力に基づいてキーボード/マウスをシミュレートするための特定の関数/プロシージャを呼び出すことを試みています。IRCユーザ入力に基づいて関数を呼び出そうとしています

私はツイッチのようなツイッチでIRCボットを実行しています。私はキーボードとマウスの入力をシミュレートする方法を知っていますが、これを効率的に行う方法を考え出すのに問題があります。

私はボットのためのクラスを持っており、それは次のように起動します:

class bot: 
def __init__(self): 
    ... 
    login stuff 
    ... 
    self.options = {'!test': self.command_test, 
    'q': self.quickSave, 
    'f': self.forward, 
    'ff': self.forward2, 
    'fff': self.forward3 
    } 
    ... 

とボットがそうのようなIRCチャット入力を解析しながら、関数が呼び出されています。私は、負荷を持って

def parse_message(self, msg): 
    if len(msg) >= 1: 
     msg = msg.split(' ') 
     if msg[0] in self.options: 
      self.options[msg[0]]() 

基本的に同じ機能だけが繰り返されます。 (前方、前方2、前方3、左、左2、左3など)。同じ機能を何度も何度も繰り返しても意味がありません。私は私のコードは次のようになりたい(3)等の前方、効率的に(2)前方に、(1)前方のように、これらの関数を呼び出す方法を

を把握することはできません。

def forward(self, num): 
    for x in range(1, num): 
     #Simulate walking forward 

私は簡単なテキスト入力を使ってforward()に引数を追加する方法を理解できません。これは私が説明するのは難しいです.100人の人々がIRCチャンネルでビデオゲームを動かすことを目指していると想像してください。

また、私はマウス/キーボード入力をエミュレートするためのヘルプを求めていません。関数を呼び出すためにテキストを使用する方法についてアドバイスが必要です。それはあなたが理解するのに役立つ場合

、私は放射性降下物4

答えて

0

をcroudplayしようとしてる、各コマンドは、実際には1つのシンボルであり、シンボルにn回繰り返して倍の同じ量に関連する関数を呼び出す意味し、右?

スペースなしの記号の文字列がcommandをされたと仮定すると、そのように行うことができる:

command = #get command 

for char in command: 
    your_dict[char]() 

ところで、本当に辞書が指定されたコマンドが含まれているかどうかを確認する必要がないです。ブロックをtry/exceptブロックにラップするだけです。

try 
    your_dict[char]() 
except KeyError: 
    # this is OK, tell the user that it's an error 
except: 
    # this means that some of the functions has raised an error 
+0

このコマンドは、必ずしも1文字に限定されるものではありません。たとえば、クイックセーブ(qs)、クイックロード(ql)、45度、90度の回転があります。いくつかのコマンドだけがそのように繰り返すことができます。しかし、この答えはあなたに感謝の動きコマンドの多くのために役立ちます。 –

+0

これは実際に私の問題を解決しました。少なくともテスト段階で:[pastebin](http://pastebin.com/AyPd0xLT) –

+0

@WillPile、それは素晴らしいニュースです、私はうまくいきました!長さが複数の文字であるコマンドを処理するには、単純な構文解析を実装することができます。たとえば、現在の文字が 'q'の場合は、次の文字を取得します。 's'または' l'の両方を抽出してキーとして使用する場合は、現在のcharのみを抽出します。 – ForceBru

関連する問題