skype_irc_bridge.py
· 1.7 KiB · Python
Raw
import Skype4Py
from irc.bot import SingleServerIRCBot
SERVER = "irc.esper.net"
PORT = 6667
CHANNEL = "#b3skypetest"
NICKNAME = "b3skypetest"
ROOM = "#stevensmith030/$a5a47aa57ec70504"
OWNER_HANDLE = "stevensmith030"
def munge(inp):
return u"".join([a + u"\u200b" for a in inp])
def skype_handler(msg, event):
if len(msg.Body) == 0:
return
if event == u"RECEIVED" or event == u"SENT" and msg.Sender.Handle != OWNER_HANDLE:
if msg.ChatName == ROOM:
for line in msg.Body.splitlines():
namea = msg.Sender.FullName.split("(")[0]
namea = msg.Sender.Handle if (len(namea) < 1 or len(namea) > 16) else namea
bridge.say(CHANNEL, u"({name}) {msga}".format(name=munge(namea), msga=line))
class SkypeIRCBridge(SingleServerIRCBot):
def __init__(self, skype, server = SERVER):
SingleServerIRCBot.__init__(self, [(SERVER, PORT)], NICKNAME, NICKNAME)
self.skype = skype
self.channel = CHANNEL
def on_nicknameinuse(self, c, e):
c.nick(c.get_nickname() + "_")
def on_welcome(self, c, e):
c.join(self.channel)
def say(self, channel, msg):
self.connection.privmsg(channel, msg)
def do_command(self, c, e):
msg = " ".join(e.arguments)
self.say(self.channel, msg.encode('utf-8'))
def skype_handler(self, c, e):
msg = "(IRC) " + " ".join(e.arguments)
self.skype.Chat(ROOM).SendMessage(msg)
on_pubnotice = do_command
on_privnotice = do_command
on_pubmsg = skype_handler
on_privmsg = do_command
skype = Skype4Py.Skype()
skype.OnMessageStatus = skype_handler
skype.Attach()
chat = [a for a in skype.Chats if a.Name == ROOM][0]
bridge = SkypeIRCBridge(skype)
bridge.start()
| 1 | import Skype4Py |
| 2 | from irc.bot import SingleServerIRCBot |
| 3 | |
| 4 | SERVER = "irc.esper.net" |
| 5 | PORT = 6667 |
| 6 | CHANNEL = "#b3skypetest" |
| 7 | NICKNAME = "b3skypetest" |
| 8 | ROOM = "#stevensmith030/$a5a47aa57ec70504" |
| 9 | OWNER_HANDLE = "stevensmith030" |
| 10 | |
| 11 | def munge(inp): |
| 12 | return u"".join([a + u"\u200b" for a in inp]) |
| 13 | |
| 14 | def skype_handler(msg, event): |
| 15 | if len(msg.Body) == 0: |
| 16 | return |
| 17 | if event == u"RECEIVED" or event == u"SENT" and msg.Sender.Handle != OWNER_HANDLE: |
| 18 | if msg.ChatName == ROOM: |
| 19 | for line in msg.Body.splitlines(): |
| 20 | namea = msg.Sender.FullName.split("(")[0] |
| 21 | namea = msg.Sender.Handle if (len(namea) < 1 or len(namea) > 16) else namea |
| 22 | bridge.say(CHANNEL, u"({name}) {msga}".format(name=munge(namea), msga=line)) |
| 23 | |
| 24 | class SkypeIRCBridge(SingleServerIRCBot): |
| 25 | def __init__(self, skype, server = SERVER): |
| 26 | SingleServerIRCBot.__init__(self, [(SERVER, PORT)], NICKNAME, NICKNAME) |
| 27 | self.skype = skype |
| 28 | self.channel = CHANNEL |
| 29 | |
| 30 | def on_nicknameinuse(self, c, e): |
| 31 | c.nick(c.get_nickname() + "_") |
| 32 | |
| 33 | def on_welcome(self, c, e): |
| 34 | c.join(self.channel) |
| 35 | |
| 36 | def say(self, channel, msg): |
| 37 | self.connection.privmsg(channel, msg) |
| 38 | |
| 39 | def do_command(self, c, e): |
| 40 | msg = " ".join(e.arguments) |
| 41 | self.say(self.channel, msg.encode('utf-8')) |
| 42 | |
| 43 | def skype_handler(self, c, e): |
| 44 | msg = "(IRC) " + " ".join(e.arguments) |
| 45 | self.skype.Chat(ROOM).SendMessage(msg) |
| 46 | |
| 47 | on_pubnotice = do_command |
| 48 | on_privnotice = do_command |
| 49 | on_pubmsg = skype_handler |
| 50 | on_privmsg = do_command |
| 51 | |
| 52 | skype = Skype4Py.Skype() |
| 53 | skype.OnMessageStatus = skype_handler |
| 54 | skype.Attach() |
| 55 | chat = [a for a in skype.Chats if a.Name == ROOM][0] |
| 56 | bridge = SkypeIRCBridge(skype) |
| 57 | bridge.start() |