msg.py (1285B)
1 import json 2 import enum 3 4 import rencode 5 6 7 class ContactType(enum.Enum): 8 NOSTR = 'nostr' 9 10 class Contact: 11 12 def __init__(self, k, v): 13 self.k = ContactType(k) 14 self.v = v 15 16 17 def typ(self): 18 return self.k.value 19 20 21 def val(self): 22 return self.v 23 24 25 class Message: 26 27 def __init__(self, author, content, contact=None): 28 self.author = author 29 self.content = content 30 self.contact = contact 31 self.origin = None 32 33 34 def set_origin(self, v): 35 self.origin = v 36 37 38 @staticmethod 39 def parse_json(v): 40 if isinstance(v, bytes): 41 v = v.decode('utf-8') 42 o = json.loads(v) 43 contact = o.get('contact') 44 contacts = [] 45 if contact != None: 46 for k in contact.keys(): 47 contacts.append(Contact(k, contact[k])) 48 return Message(o['author'], o['content'], contact=contacts) 49 50 51 def serialize(self): 52 o = { 53 'n': self.author, 54 'v': self.content, 55 } 56 if self.origin != None: 57 o['o'] = self.origin 58 for v in self.contact: 59 o[v.typ()] = v.val() 60 return rencode.dumps(o) 61 62 63 def __str__(self): 64 return self.author + " says: '" + self.content + "'"