2012-09-28 134 views
-1

我有一些麻煩,我的Python IRC聊天機器人。Python IRC聊天機器人

http://pastebin.com/W0dttwZy

使用Koryls建議

import socket 

authlist = "achubra alice_mayami andyzaft ariayesassistant badass001 celebrations celoricqt damonzgaming deadlyabyss deathgazeqtt elvinemod flamespark0 ig_feeds jeboogie kuocolaya madlibx mezukage pwrpuff sikkfromtm socaldesigner whuda wtducksauce xinyi331" 
server = "ariayesassistant.jtvirc.com" 
name = "ariayesassistant" 
port = 6667 
channel = "#ariayethehuntress" 
password = "xx" 
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
irc.connect((server, port)) 
irc.send("PASS " + password + "\n") 
irc.send("NICK " + name + "\n") 
irc.send("USER ariayesassistant ariayesassistant ariayesassistant :AriayesBot\n") 
irc.send("JOIN " + channel + "\n") 
while True: 

    def message(msg): 
     irc.send("PRIVMSG " + channel + " :" + msg + "\n") 



    data = irc.recv(1204) 
    data = data.strip('\r\n') 
    senderusr = data.split(" ") 
    senderusr = senderusr[0] 
    senderusr = senderusr.split("!") 
    senderusr = senderusr[0] 
    senderusr = senderusr.strip(":") 

    print data 
    if data.find == "PONG" : 
     irc.send("PING") 

    if data.find("!facebook") and authlist.find(senderusr): 
     message("Add Angie on Facebook: https://facebook.com/AngieJHagedorn") 
    #if data.find(":!twitter") and authlist.find(senderusr) != -1: 
    # message("Follow Angie on Twitter: https://twitter.com/AriayeHuntress") 

    #if data.find(":!fanpage") and authlist.find(senderusr) != -1: 
    # message("Like Angie's Fanpage on Facebook: http://facebook.com/AriayeTheHuntress") 

    #if data.find(":!bg") and authlist.find(senderusr) != -1: 
    # message("Wanna play BGs with Angie on WoW? Add her battletag: Ariaye#1211") 

    #if data.find(":!youtube") and authlist.find(senderusr) != -1: 
    # message("Subscribe to Angie on Youtube! http://youtube.com/ariayethehuntress") 

的!Facebook的命令,如果我輸入通道任何事情都會執行之後。 (我的暱稱= badass001)

我將如何正確地執行if命令。 (非常新的蟒蛇)

+1

究竟是什麼問題? – Wug

+2

行if data [0] ==「PONG」!= -1:不需要!= -1。你實際上正在評估False!= -1,它總是爲True。 – korylprince

+0

與第二條if語句相同。它永遠是真的,這可能是你的問題來自何處。無需與-1進行比較。實際上在Python中,-1與False不同。 – korylprince

回答

0

你有一個問題,是因爲邏輯錯誤的。 在Python中,你有True和False。 0評估爲False,其他任何評估爲True。這並不意味着任何東西都等於True。

0 ==虛假

1 ==真

現在你做一些邏輯語句要麼是真或假,然後比較,爲-1。 True和False!= -1這使得if語句總是評估爲True。

在if語句不比較爲真或假:

if statement: 
    Code... 

不:

if statement == True: 
    Code... 

另外,不要使用data.find()。如果未找到該字符串,則返回索引或-1,從而產生更多邏輯錯誤(因爲-1的計算結果爲True,除了0以外的任何數字)。你說:

if "!facebook" in data and senderusr in authlist: 
    Code... 
+0

我已經改變了IFS太: 如果data.find == 「PONG」: irc.send( 「平安」) 如果data.find( 「臉譜!」)和authlist.find(senderusr): 消息(「在Facebook上添加Angie:https://facebook.com/AngieJHagedorn」) 我仍然遇到問題。 – user1705279

+0

看到我上面更新的答案。 – korylprince

+0

將全部代碼添加到pastebin並放入原始帖子。 – user1705279

0

寫一個IRC聊天機器人很簡單..我甚至寫了兩個「非常基本」的機器人回來。

您可以在

Bot1看着他們:https://gist.github.com/2438051

Bot2:https://gist.github.com/2421201

+0

他們非常簡單。我有一個體面的寫在vb.net,但我想學習不同的語言。所以我決定在python中這樣做。然而,我只是在If語句中發生問題,當我說出任何內容時,bot發送消息而不是我說!facebook。 – user1705279

+0

請注意,不要在第二個示例中使用eval。 IRC聊天中的任何人都可能危及您的機器。 – korylprince

+0

@korylprince我寫的只是爲了好玩而已。 – Surya

2

首先

您應該諮詢文件。 python中的比較行爲應該被記錄下來,正如if聲明的行爲(順便說一下,不應該大寫)。在極少數情況下,您遇到無法找到文檔的行爲,請使用解釋器以實驗方式確定結果。

你會發現下面是在解釋重複性:

>>> True != -1 
True 
>>> False != -1 
True 

這應該給你一些見解,爲什麼if語句中的代碼在每一個進線發射,而不是僅僅當你想要它。沒有可能的值沒有返回true的條件。

if聲明

我還要指出的是,if聲明以完全相同的方式在python,因爲它在基本的,在以下幾個方面:

  • 有一段代碼,被稱爲條件,被評估爲布爾值
  • 有一塊代碼(稱爲主體),當且僅當條件結果爲真時才執行該代碼塊
  • 如果condi重刑計算結果爲nonboolean值,它是通過什麼手段強制轉換爲布爾值是合適的

你應該能夠上方,並進一步利用這些限制,以及解釋片斷,你的代碼提供自己(特別是你的if語句的條件),意識到評估你的情況的結果總是如此,不管它接收到的線是什麼(因爲無論真假都不遜於-1)

你得到一個布爾值值爲data.find("!facebook") and authlist.find(senderusr),那你爲什麼將它與-1進行比較?它已經是一個布爾值,並且布爾值永遠不會等於-1。 if語句的條件需要一個布爾值,那麼爲什麼不使用那個而不是將它與某些東西進行比較呢?來自VB家庭成員,爲什麼不將布爾表達式的結果與False進行比較?爲什麼要比較它們?

代碼

if not data[0] == "PONG": 
if data.find("!facebook") and senderusr in authlist: 

最後

@Wug我喜歡寫我自己的工作。 - user1705279

<speech 
topic="code-reuse,pride" 
keywords="reinvent the wheel;ircbot-collection;skybot"> 
    <!-- I'm sure you know the drill by now. --> 
</speech>