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