2016-11-19 46 views
2

我對Python相當陌生,但對編程並不陌生。基本上,我試圖調用某些函數/程序來模擬基於來自IRC頻道的用戶輸入的鍵盤/鼠標。試圖根據IRC用戶輸入調用函數

我正在Twitch上運行一個IRC bot,就像一個抽搐玩類似的事情。我知道如何模擬鍵盤和鼠標輸入,但我很難找出如何有效地做到這一點。

我對機器人的類,它開始像:

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等)。一遍又一遍地重複相同的功能是沒有意義的。我無法弄清楚如何有效地調用這些功能,如前(1),前(2),前鋒(3)等

,我想我的代碼看起來像這樣:

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

我只是不能弄清楚如何使用簡單的文本輸入將參數添加到forward()。這很難解釋,只要想象一下,有100人投票移動/瞄準IRC頻道的視頻遊戲。

再次,我不是要求幫助模擬鼠標/鍵盤輸入。我只需要關於如何使用文本來調用函數的建議。

如果它幫助你理解,我試圖croudplay輻射4

回答

0

所以,每個命令實際上是一個符號,並重復符號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

那麼,命令並不總是限制爲一個字符。例如,有快速保存(qs),quickload(ql),轉動45度,90度。只有一些命令可以像這樣迭代;然而,這個答案會對很多移動命令有所幫助,謝謝。 –

+0

這實際上解決了我的問題。至少在測試階段:[pastebin](http://pastebin.com/AyPd0xLT) –

+0

@WillPile,這是個好消息,我很高興它的工作!要處理長度超過一個字符的命令,可以實現一些簡單的解析:例如,如果當前字符是「q」,則嘗試檢索下一個字符。如果它是''''或'l'提取並用作鍵,否則只提取當前字符。 – ForceBru