2012-04-06 3 views
2

私は成功したが、私はIRCボットをコードしようとしていた。私は何かをしたいと思っています。コードはうまく動作しますが、ボットは2秒を追加するときにWhileループを使用してIRCからコマンドを読み込むため、ボットは接続しないため、time.sleep(秒)で接続します。それは私の2番目のループを読んで、応答にタイムリーに接続を一時停止します:PINGは切断しますか?私は検索していますが、私は何を試してみるべきか分からないので、私が探しているのは混乱しています。IRC botはメインループを中断することなくループを眠ります

スタックレス、マルチスレッド、サブプロセス。私はちょっと混乱するほど多くの結果があります。だから私は最高の方法が私はRSSボットしようとしているボットはうまく動作する場合、私はコマンドを使用して!rssのIRCチャネルでは、私はこれまで10分新しいものをチェックする必要がありますし、アップ。私はしばらくの間を追加する場合

#!/usr/bin/python 

import socket, sys, string, time, feedparser, hashlib 
port = 6667 
nick = "RSSbot" 
host = 'irc.server.com' 
name = "RSSBOT" 
channel = '#debug' 
ident = 'rssbot' 
irc = socket.socket() 
irc.connect ((host, port)) 
irc.send ('NICK ' + nick + '\r\n') 
irc.send ('USER ' + ident + ' ' + ident + ' ' + ident + ' :rssbot\r\n') 

def readRss(): 
    feedurl = feedparser.parse("http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=username") 
    newest = feedurl['items'][0].title 
    newest = newest.replace("username:","") 
    msg = newest.split("http://") 
    title = msg[0] 
    url = msg[1] 
    url = "http://" + url 
    e = feedurl.entries[2] 
    threadurl = e.link 
    id = hashlib.md5(url + title).hexdigest() 
    irc.send ("PRIVMSG #debug :Tittle:%s\r\n" % newest) 
    irc.send ("PRIVMSG #debug :URL: %s\r\n" % url) 
    irc.send ("PRIVMSG #debug :MD5: %s\r\n" % id) 
while 1: 
    data = irc.recv (1024) 
    print(data) 

    if data.find ('376') != -1: 
     irc.send('JOIN ' + channel + '\r\n') 
    if data.find ('PING') != -1: 
     irc.send('PONG ' + data.split() [1] + '\r\n') 
    if data.find ('!rss') != -1: 
     feedurl = feedparser.parse("http://api.twitter.com/1/statuses/user_timeline.rss?screen_name=username") 
     newest = feedurl['items'][0].title 
     newest = newest.replace("username:","") 
     msg = newest.split("http://") 
     title = msg[0] 
     url = msg[1] 
     url = "http://" + url 
     #e = feedurl.entries[2] 
     #threadurl = e.link 
     id = hashlib.md5(url + title).hexdigest() 
     irc.send ("PRIVMSG #debug :Tittle:%s\r\n" % newest) 
     irc.send ("PRIVMSG #debug :URL: %s\r\n" % url) 
     irc.send ("PRIVMSG #debug :MD5: %s\r\n" % id) 
    while true: 
     readRss() 
     time.sleep(300) 

:真しばらく1内:ここ

は私のコードである私がする必要があるループ:time.sleep(300)中1でsleepコマンドの競合で私は毎分新しいフィードを確認することができるように何か似てください。何ができますか?

+0

使用twisted.wordsを行います。 – geoffspear

+0

ここには2番目のループはありません。 –

答えて

3

新しいループの代わりに、別のタイマーを使用します。

import time 
last_update = time.time() 

while 1: 
    # the rest of your while loop as usual 
    now = time.time() 
    if now - last_update > 300: 
     # you've waited 300 seconds 
     # check feeds or whatever 
     last_update = now 
+0

私はそれを試みましたが、うまくいかなかったのですが、10秒で試してみましたが、それを読んで実行することは決してないようです。またはおそらく私は間違っていた、多分。 – Slightz

+0

@Slightz試してみてください。うまくいかない場合は、あなたの質問で試したところで完全なコードを投稿し、ここでコメントしてください。このメソッドは間違いなく正しく動作すれば正常に動作します – agf

+0

nvmは動作しました。ありがとうございました。 – Slightz

0

私は、これはあなたがhttps://github.com/mouuff/MouBot(私はこのircloop fonctionと呼ば助けるかもしれないプロジェクトをチェックBOT私のIRCでthreadingモジュールであることを処理し、サーバーのpingを答えるとbottingもの:)

関連する問題