Last active 1457495472

Skype<->IRC Bridge. Get ROOM id from https://gist.github.com/blha303/9913693. Getting an error? Remove Transport='x11'. Still getting an error? Join irc.esper.net #blha303 and ask.

Revision 30ab7de5f68eee63b16b790b5468801a96d2792a

skype_irc_bridge.py Raw
1import Skype4Py
2from irc.bot import SingleServerIRCBot
3
4SERVER = "irc.esper.net"
5PORT = 6667
6CHANNEL = "#b3skypetest"
7NICKNAME = "b3skypetest"
8ROOM = "#stevensmith030/$a5a47aa57ec70504"
9OWNER_HANDLE = "stevensmith030"
10
11def munge(inp):
12 return u"".join([a + u"\u200b" for a in inp])
13
14def 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
24class 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
52skype = Skype4Py.Skype()
53skype.OnMessageStatus = skype_handler
54skype.Attach()
55chat = [a for a in skype.Chats if a.Name == ROOM][0]
56bridge = SkypeIRCBridge(skype)
57bridge.start()