过去一周左右我尝试了很多方法来尝试让它发挥作用。 我设法让Skype2IRC在另一个脚本中运行,而不是垃圾邮件IRC或其他任何东西。这很好。只需在消息状态,发送消息给IRC。那部分我可以轻松下来。但是,从IRC到Skype的部分是我遇到问题的地方。首先,我想我会尝试使用多线程。没出去好。然后,我尝试了这个;
import os,sys,time,Skype4Py,socket,re,string
from random import choice
s = Skype4Py.Skype()
s.Attach() #Attach to Skype. Make sure to accept permissions from Skype client!
name = "Ibex"
network = "irc.myserver.net"
channel = "#Skype"
port = 6667
irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
irc.connect ( ( network, port ) )
print irc.recv ( 4096 )
irc.send ( 'NICK '+name+'\r\n' )
irc.send ( 'USER '+name+' '+name+' '+name+' : IRC Bot\r\n' )
irc.send ( 'JOIN '+channel+'\r\n' )
ircusername = '' #referencing variable so it can be used before, data will change in while loop
ircmessage = '' #same as above
def Ibex(Message, Status):
chat = Message.Chat
members = chat.MemberObjects
msg = Message.Body
send = Message.Chat.SendMessage
sAlias = Message.FromDisplayName
sUsername = Message.FromHandle
if Status == 'RECEIVED':
irc.send ( 'PRIVMSG '+channel+' :<Skype - '+sUsername+'>: '+msg+'\r\n' )
if ircusername != '':
try:
ircmessage = data.split(channel+" :",1)[1]
send("<IRC - "+ircusername+">: "+ircmessage)
except:
print "Error getting new IRC message."
s.OnMessageStatus = Ibex
while True:
data = irc.recv ( 4096 )
print data
if data.find ( 'PING' ) != -1:
irc.send ( 'PONG ' + data.split() [ 1 ] + '\r\n' )
if data.find ( 'KICK' ) != -1:
irc.send ( 'JOIN '+channel+'\r\n' )
try:
ircusername = re.search(':(.*)!', data)
ircusername = ircusername.group(1)
except:
pass
经过大量的反复试验。并且,在IRC和Skype中有很多垃圾邮件,我设法将此邮件发送到Skype。
然而,它是垃圾邮件。
我会在IRC发送一条消息,什么都不会发生。 我将在Skype中发送一条消息(因此s.OnMessageStatus = Ibex)并按预期发送IRC消息。但是,它不会停止发送它。它就像疯了一样蹦蹦跳跳。我尝试过收到消息时设置sendMSG = True,发送后将sendMSG设置为false,然后sendMSG = true,然后发送。这似乎没有成功。
有人有什么建议吗?我只是遗漏了一些导致此错误的小事吗?感谢先进的任何人,这一直困扰着我一段时间。
我设法让一个旧的IRC / Skype网桥工作了一段时间,但那个剧本早已不复存在,我不记得我是怎么做到的。