Exemple #1
0
    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'
Exemple #3
0
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')
Exemple #5
0
 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)
Exemple #6
0
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')
Exemple #7
0
 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 []
Exemple #8
0
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()
Exemple #9
0
    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()
Exemple #10
0
 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.')
     ]
Exemple #11
0
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)
Exemple #12
0
 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
Exemple #13
0
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)