IRC ボットのコーディングを試みていますが、成功しています。やりたいことを実装するのに問題があります。コードは正常に動作しますが、次の点に問題があります。
ボットはWhileループを使用してIRCからコマンドを読み取るため、time.sleep(秒)で2番目のWhileを追加すると、ボットは接続しません.2番目のループを読み取り、:PINGに応答するのに間に合わずに接続を一時停止するためです切断しますか。私は検索していましたが、何を試したらいいのかわからないので、もっと混乱します。
スタックレス、マルチスレッド、サブプロセス。あまりにも多くの結果があり、私はさらに混乱します。最善の方法は何でしょうか。RSS ボットを試しています。IRC チャネルで !rss コマンドを使用するとボットは正常に動作しますが、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)
while :true 内に time.sleep(300) を追加すると、sleep コマンドが while 1: ループと競合するため、x 分ごとに新しいフィードを確認できるようにする必要があります。私は何ができますか?