+ return out, sock
+
+def get_solde(sock, idbde, serv, canal):
+ """Récupère le (success, solde, pseudo) de l'utilisateur NK n°``idbde``"""
+ try:
+ sock.write(json.dumps(["compte", idbde]))
+ ret = full_read(sock)
+ retcode = ret["retcode"]
+ if retcode == 0:
+ solde = ret["msg"]["solde"]
+ pseudo = ret["msg"]["pseudo"]
+ return (True, solde, pseudo)
+ else:
+ serv.privmsg(canal, ret["errmsg"])
+ return (False, None, None)
+ except Exception as exc:
+ trace = traceback.format_exc()
+ msg = "failed\n%s" % trace
+ for l in msg.split("\n"):
+ serv.privmsg(canal, l)
+ #log(self.serveur, "priv", auteur, " ".join(message) + "[failed]")
+ return (False, None, None)
+
+def consomme(sock, idbde, conso, serv, canal):
+ """Fais consommer une conso à l'utilisateur NK n°``idbde``"""
+ try:
+ sock.write(json.dumps(["get_boutons", ["", ""]]))
+ ret = full_read(sock)
+ retcode = ret["retcode"]
+ if retcode == 0:
+ boutons = ret["msg"]
+ ibouton = [b["label"].lower() for b in boutons].index(conso.lower())
+ bouton = boutons[ibouton]
+ sock.write(json.dumps(["consos", [[bouton["id"], idbde, 1]]]))
+ ret = full_read(sock)
+ if ret["retcode"] == 0:
+ [[retcode, [idbouton, idbde], errmsg]] = ret["msg"]
+ if retcode != 0:
+ serv.privmsg(canal, errmsg)
+ else:
+ success, solde, pseudo = get_solde(sock, idbde, serv, canal)
+ if success:
+ serv.privmsg(canal, (u"%s consomme 1 %s (nouveau solde : %s)" % (pseudo, bouton["label"], solde)).encode("utf-8"))
+ else:
+ serv.privmsg(canal, (u"%s consommé mais impossible de récupérer le solde après transaction." % (bouton["label"])).encode("utf-8"))
+ return True # on a réussi à consommer la conso
+ else:
+ serv.privmsg(canal, ret["errmsg"].encode("utf-8"))
+ return False
+ else:
+ serv.privmsg(canal, ret["errmsg"])
+ except Exception as exc:
+ trace = traceback.format_exc()
+ msg = "failed\n%s" % trace
+ for l in msg.split("\n"):
+ serv.privmsg(canal, l)