def test_truncate(self): """truncate should leave there with the specified number of messages per category (plus one for every category that was truncated).""" messages = [utils.Message('Category') for _ in range(3)] truncated_messages = utils.MessagesOutput.truncate(messages, 1) self.assertEqual(len(truncated_messages), 2) self.assertEqual(truncated_messages.count(utils.Message('Category')), 1)
def serve(conn): data = conn.recv(1024) if not data: print '[-] Data receive error' print '[-] Exiting' sys.exit() req = pickle.loads(data) if req.header.opcode == 10 and req.header.cmd == 'PUBKEY': p = req.p g = req.g y1 = req.y1 y2 = req.y2 public_key = (g, y1, y2) print '[+] Public Key Published' print '[+] Waiting for Signed Message by Client' data = conn.recv(1024) if not data: print '[-] Data receive error' print '[-] Exiting' sys.exit() req = pickle.loads(data) if req.header.opcode == 20 and req.header.cmd == 'SIGNEDMSG': print '[+] Signed Message received' signature = req.signature c = signature.c s = signature.s msg = req.buf if verify_signature(msg, public_key, p, c, s): print '[+] Digital Signature verified successfuly' header = utils.Header(30, 'VERSTATUS') message = utils.Message(header, None, None, None, None, None, None, 'GOOD') data = pickle.dumps(message) conn.send(data) else: print '[+] Digital Signature verification failed' header = utils.Header(30, 'VERSTATUS') message = utils.Message(header, None, None, None, None, None, None, 'BAD') data = pickle.dumps(message) conn.send(data) else: print '[-] Invalid opcode or command' else: print '[-] Invalid opcode or command'
def make_diff_message(category, record_id, extra_data=None, xml_tag=None): """Returns a Message object with the provided information.""" is_person = is_key_person(record_id) real_record_id = key_to_record_id(record_id) if is_person: return utils.Message(category, extra_data=extra_data, xml_tag=xml_tag, person_record_id=real_record_id) else: return utils.Message(category, extra_data=extra_data, xml_tag=xml_tag, note_record_id=real_record_id)
async def on_message(message): if db['429']: utils.status(True) time.sleep(utils._429) utils.status(False) return if message.author == client.user or message.channel.name != 'timer-bot' or webhook.USERNAME in str( message.author): return utils.logger(f'{message.author}: {message.content}') msg = utils.Message(message.content.split(' '), message.author) global chain msg_to_send = chain.send(msg) try: if msg_to_send['type'] == 'all': await message.channel.send(msg_to_send['msg']) elif msg_to_send['type'] == 'dm': await message.author.send(msg_to_send['msg']) except discord.errors.HTTPException as e: message_error = str(e) utils.logger(message_error) if '429' in message_error: utils.status(True) time.sleep(utils._429) utils.status(False) elif '50007' in message_error: api.delete(message.author.name) utils.logger('50007') await message.channel.send( f'{message.author.mention} I can not dm you')
def make_message(self, category, record, element=None, xml_tag=None, is_error=True): """Wrapper for initializing a Message that extracts the person_record_id and note_record_id, if present, from a record and the text and line number from an element""" person_record_id = self.tree.get_field_text(record, 'person_record_id') note_record_id = self.tree.get_field_text(record, 'note_record_id') tag = xml_tag text = None line = None if element != None: tag = utils.extract_tag(element.tag) text = element.text line = self.tree.line_numbers[element] return utils.Message(category, is_error=is_error, xml_line_number=line, xml_tag=tag, xml_text=text, person_record_id=person_record_id, note_record_id=note_record_id)
def OnGroupMsg(msg, group, user): try: r = requests.get('https://api.lolicon.app/setu/', params={ 'apikey': '522605455f0c66a4a242d8', 'size1200': 'true', 'r18': 0 }, timeout=5) if r.status_code == 200: r = json.loads(r.text) if r['code'] == 0: url = r['data'][0]['url'] r = utils.UploadURL(url, 'group', 10) if r != None: m = utils.Message(group=group) m.appendAt(user) m.appendPlain('你要的涩图:' + url) m.appendImage(r['imageId']) m.send() print('[pixiv] send') return except requests.exceptions.RequestException: pass utils.SendGroupPlain(group, '涩图暂不可用,多运动少冲!') print('[pixiv] send fail')
def validate_root_has_child(self): """If there is at least one child, returns an empty list. Else, returns a list with an error message.""" root = self.tree.getroot() children = root.getchildren() if not children: return [ utils.Message('The root node must have at least one child') ] return []
def OnGroupMsg(msg, group, user): text = msg['messageChain'][2]['text'].lstrip().split(' ', 2) message = text[1] tm = int(time.mktime(time.strptime(text[2], "%Y.%m.%d %H.%M"))) plan.append([tm, group, message]) with open('./mod/reminder/plan.txt', "w") as f: for i in plan: f.write(str(i[0]) + ' ' + str(i[1]) + ' ' + i[2] + '\n') msg = utils.Message(group=group) msg.appendAt(user) msg.appendPlain('闹钟已添加') msg.send()
def send_request(): op = operation.get().upper() pos = position.get() val = value.get() txt.delete("1.0", END) if not check_data(op, pos, val): return # Server Address server_address = (udp_host.get(), int(udp_port.get())) # Client Address client_address = (udp_host.get(), 12345) # Create a UDP socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(client_address) # Prepare request message arguments = (client_address, op, pos, None if op == 'GET' else val) message = msg.Message('REQUEST', arguments) try: # Send data print('Sending message:') print(message) sock.sendto(message.serialize().encode(), server_address) # Receive response print('\nWaiting to receive...\n') sock.settimeout(5.0) data, server = sock.recvfrom(4096) txt.delete("1.0", END) txt.insert(END, data.decode() + "\n") except socket.timeout: txt.delete("1.0", END) txt.insert(END, "Error: timeout") except Exception as e: txt.delete("1.0", END) txt.insert(END, str(e) + "\n") print('Closing socket') sock.close()
def validate_root_has_mandatory_children(self): """In 1.1, the root must have at least a person node. In 1.2+, the root must either have a person or note node. Returns true if the tree has the required node. Note that extraneous nodes will not be reported here, but in a later test, so if the root has a person and a note node in version 1.1, that will return true.""" children = self.tree.getroot().getchildren() for child in children: tag = utils.extract_tag(child.tag) if tag == 'person' or (self.version >= 1.2 and tag == 'note'): return [] return [ utils.Message( 'Having a person tag (or a note tag in PFIF 1.2+) as ' 'one of the children of the root node is mandatory.') ]
def Entry(): global plan with open('./mod/reminder/plan.txt', "r") as f: s = f.read().splitlines() for i in s: tmp = i.split() plan.append([int(tmp[0]), int(tmp[1]), tmp[2]]) while (True): tm = int(time.time()) for i in plan: if i[0] < tm: msg = utils.Message(group=i[1]) msg.appendAtAll() msg.appendPlain(i[2]) msg.send() print('[reminder] send') plan.remove(i) with open('./mod/reminder/plan.txt', "w") as f: for j in plan: f.write(j[0] + ' ' + j[1] + ' ' + j[2] + '\n') time.sleep(30)
def validate_notes_belong_to_persons(self): """Validates that every note that is at the top level contains a person_record_id and that every note inside a person with a person_record_id matches the id of the parent person. Returns a list of all unmatched notes""" messages = [] top_level_notes = self.tree.get_top_level_notes() for note in top_level_notes: person_id = note.find( self.tree.add_namespace_to_tag('person_record_id')) if person_id == None: messages.append( self.make_message( 'A top level note (a note not contained within a person) is ' 'missing a person_record_id.', record=note, element=note)) persons = self.tree.get_all_persons() for person in persons: person_id = person.find( self.tree.add_namespace_to_tag('person_record_id')) if person_id != None: notes = person.findall(self.tree.add_namespace_to_tag('note')) for note in notes: note_person_id = note.find( self.tree.add_namespace_to_tag('person_record_id')) if note_person_id != None and note_person_id.text != person_id.text: messages.append( utils.Message( 'You have a note that has a person_record_id that does not ' 'match the person_record_id of the person that owns the note.', xml_line_number=self.tree. line_numbers[note_person_id], xml_tag=utils.extract_tag(note_person_id.tag), xml_text=note_person_id.text, person_record_id=self.tree.get_field_text( person, 'person_record_id'), note_record_id=self.tree.get_field_text( note, 'note_record_id'))) return messages
def OnGroupMsg(msg, group, user): global history with lock: data = msg['messageChain'][1:] for i in range(len(data)): if data[i]['type'] == 'Image': data[i]['url'] = None if group not in history: history[group] = {} history[group]['msg'] = data history[group]['times'] = 0 if history[group]['msg'] == data: history[group]['times'] += 1 else: history[group]['msg'] = data history[group]['times'] = 1 if history[group]['times'] == 3: msg = utils.Message(group=group) msg.appendCustom(data) msg.send() print('[repeater] send')
if __name__ == '__main__': soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print '[+] Starting Client' soc.connect((utils.ip, utils.port)) print '[+] Connected to Server' print '[+] Generating Public Key' private_key, public_key, p = generate_key() print '[+] Publishing Public Key' g = public_key[0] y1 = public_key[1] y2 = public_key[2] header = utils.Header(10, 'PUBKEY') message = utils.Message(header, p, g, y1, y2, None, None, None) data = pickle.dumps(message) soc.send(data) print '[+] Public Key sent to Server' msg = raw_input('Enter message: ') print '[+] Generating Signature' c, s = generate_signature(msg, private_key, public_key, p) print '[+] Signature generated' header = utils.Header(20, 'SIGNEDMSG') signature = utils.Signature(c, s) message = utils.Message(header, p, g, y1, y2, msg, signature, None) data = pickle.dumps(message) print '[+] Sending signed message to server' soc.send(data)