IRC Metadata draft support for moods
This commit is contained in:
parent
5f6cda821b
commit
298dd8eb5d
3 changed files with 60 additions and 11 deletions
55
irc.py
55
irc.py
|
@ -209,6 +209,13 @@ class PesterIRC(QtCore.QThread):
|
|||
@QtCore.pyqtSlot()
|
||||
def updateMood(self):
|
||||
me = self.mainwindow.profile()
|
||||
# Moods via metadata
|
||||
try:
|
||||
helpers.metadata(self.cli, '*', "set", "mood", str(me.mood.value()))
|
||||
except socket.error as e:
|
||||
PchumLog.warning(e)
|
||||
self.setConnectionBroken()
|
||||
# Backwards compatibility
|
||||
try:
|
||||
helpers.msg(self.cli, "#pesterchum", "MOOD >%d" % (me.mood.value()))
|
||||
except socket.error as e:
|
||||
|
@ -385,6 +392,13 @@ class PesterHandler(DefaultCommandHandler):
|
|||
self.parent.memoReceived.emit(msg[1:msg.index("]")], handle, msg)
|
||||
else:
|
||||
self.parent.noticeReceived.emit(handle, msg)
|
||||
def metadata(self, target, nick, key, visibility, value):
|
||||
# The format of the METADATA server notication is:
|
||||
# METADATA <Target> <Key> <Visibility> <Value>
|
||||
if key == "mood":
|
||||
mood = Mood(int(value))
|
||||
self.parent.moodUpdated.emit(nick, mood)
|
||||
|
||||
def privmsg(self, nick, chan, msg):
|
||||
handle = nick[0:nick.find("!")]
|
||||
if len(msg) == 0:
|
||||
|
@ -477,12 +491,38 @@ class PesterHandler(DefaultCommandHandler):
|
|||
from time import sleep
|
||||
sleep(0.5) # To prevent TLS from dying </3
|
||||
helpers.join(self.client, "#pesterchum")
|
||||
# Moods via metadata
|
||||
helpers.metadata(self.client, '*', 'sub', 'mood')
|
||||
helpers.metadata(self.client, '*', "set", "mood", str(mymood))
|
||||
# Backwards compatible moods
|
||||
helpers.msg(self.client, "#pesterchum", "MOOD >%d" % (mymood))
|
||||
|
||||
def keyvalue(self, target, handle_us, handle_owner, key, visibility, *value):
|
||||
# The format of the METADATA server notication is:
|
||||
# METADATA <Target> <Key> <Visibility> <Value>
|
||||
if key == "mood":
|
||||
mood = Mood(int(value[0]))
|
||||
self.parent.moodUpdated.emit(handle_owner, mood)
|
||||
|
||||
def metadatasubok(self, *params):
|
||||
PchumLog.info("metadatasubok: " + str(params))
|
||||
|
||||
def nomatchingkey(self, target, our_handle, failed_handle, key, *error):
|
||||
# Try to get moods the old way if metadata fails.
|
||||
PchumLog.info("nomatchingkey: " + failed_handle)
|
||||
chumglub = "GETMOOD "
|
||||
try:
|
||||
helpers.msg(self.client, "#pesterchum", chumglub + failed_handle)
|
||||
except socket.error as e:
|
||||
PchumLog.warning(e)
|
||||
self.parent.setConnectionBroken()
|
||||
|
||||
|
||||
def nicknameinuse(self, server, cmd, nick, msg):
|
||||
newnick = "pesterClient%d" % (random.randint(100,999))
|
||||
helpers.nick(self.client, newnick)
|
||||
self.parent.nickCollision.emit(nick, newnick)
|
||||
|
||||
def quit(self, nick, reason):
|
||||
handle = nick[0:nick.find("!")]
|
||||
PchumLog.info("---> recv \"QUIT %s: %s\"" % (handle, reason))
|
||||
|
@ -513,6 +553,7 @@ class PesterHandler(DefaultCommandHandler):
|
|||
if handle == self.parent.mainwindow.randhandler.randNick:
|
||||
self.parent.mainwindow.randhandler.setRunning(True)
|
||||
self.parent.moodUpdated.emit(handle, Mood("chummy"))
|
||||
|
||||
def mode(self, op, channel, mode, *handles):
|
||||
PchumLog.debug("op=" + str(op))
|
||||
PchumLog.debug("channel=" + str(channel))
|
||||
|
@ -683,20 +724,12 @@ class PesterHandler(DefaultCommandHandler):
|
|||
self.client.send('PONG', server)
|
||||
|
||||
def getMood(self, *chums):
|
||||
chumglub = "GETMOOD "
|
||||
# Try to get mood via metadata get.
|
||||
# If it fails the old code is excecuted.
|
||||
for c in chums:
|
||||
chandle = c.handle
|
||||
if len(chumglub+chandle) >= 350:
|
||||
try:
|
||||
helpers.msg(self.client, "#pesterchum", chumglub)
|
||||
except socket.error as e:
|
||||
PchumLog.warning(e)
|
||||
self.parent.setConnectionBroken()
|
||||
chumglub = "GETMOOD "
|
||||
chumglub += chandle
|
||||
if chumglub != "GETMOOD ":
|
||||
try:
|
||||
helpers.msg(self.client, "#pesterchum", chumglub)
|
||||
helpers.metadata(self.client, chandle, "get", "mood")
|
||||
except socket.error as e:
|
||||
PchumLog.warning(e)
|
||||
self.parent.setConnectionBroken()
|
||||
|
|
|
@ -66,6 +66,11 @@ def ctcp(cli, handle, cmd, msg=""):
|
|||
def ctcp_reply(cli, handle, cmd, msg=""):
|
||||
notice(cli, str(handle), "\x01%s %s\x01" % (cmd.upper(), msg))
|
||||
|
||||
def metadata(cli, target, subcommand, *params):
|
||||
# IRC metadata draft specification
|
||||
# https://gist.github.com/k4bek4be/92c2937cefd49990fbebd001faf2b237
|
||||
cli.send("METADATA", target, subcommand, *params)
|
||||
|
||||
def msgrandom(cli, choices, dest, user=None):
|
||||
o = "%s: " % user if user else ""
|
||||
o += random.choice(choices)
|
||||
|
|
|
@ -180,6 +180,16 @@ numeric_events = {
|
|||
"502": "usersdontmatch",
|
||||
}
|
||||
|
||||
# IRC metadata draft specification
|
||||
# https://gist.github.com/k4bek4be/92c2937cefd49990fbebd001faf2b237
|
||||
metadata_numeric_events = {
|
||||
"761": "keyvalue",
|
||||
"762": "metadataend",
|
||||
"766": "nomatchingkey",
|
||||
"770": "metadatasubok",
|
||||
}
|
||||
numeric_events.update(metadata_numeric_events)
|
||||
|
||||
generated_events = [
|
||||
# Generated events
|
||||
"dcc_connect",
|
||||
|
@ -205,6 +215,7 @@ protocol_events = [
|
|||
"quit",
|
||||
"invite",
|
||||
"pong",
|
||||
"metadata" # Metadata specification
|
||||
]
|
||||
|
||||
all_events = generated_events + protocol_events + list(numeric_events.values())
|
||||
|
|
Loading…
Reference in a new issue