add module: shuffle (allows to shuffle message text in various ways)
This commit is contained in:
		
							parent
							
								
									1d22a31418
								
							
						
					
					
						commit
						b049f0a152
					
				
							
								
								
									
										107
									
								
								modules/shuffle/index.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								modules/shuffle/index.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,107 @@
 | 
			
		||||
import random
 | 
			
		||||
 | 
			
		||||
module_path = ""
 | 
			
		||||
 | 
			
		||||
def extract_separators(text):
 | 
			
		||||
    sequence_buf = ""
 | 
			
		||||
    seps = []
 | 
			
		||||
 | 
			
		||||
    for i in text:
 | 
			
		||||
        if i in ["\n", " "]:
 | 
			
		||||
            sequence_buf += i
 | 
			
		||||
        elif sequence_buf:
 | 
			
		||||
            seps.append(sequence_buf)
 | 
			
		||||
            sequence_buf = ""
 | 
			
		||||
 | 
			
		||||
    return seps
 | 
			
		||||
 | 
			
		||||
def process(message, path):
 | 
			
		||||
    if not message.text.lower().startswith("!shuf"):
 | 
			
		||||
        return "", None
 | 
			
		||||
 | 
			
		||||
    global module_path
 | 
			
		||||
    module_path = path
 | 
			
		||||
 | 
			
		||||
    cmd = message.text.split()
 | 
			
		||||
    print(cmd)
 | 
			
		||||
    l = len(cmd)
 | 
			
		||||
 | 
			
		||||
    # settings
 | 
			
		||||
    split_by = "word"
 | 
			
		||||
    shuf_individual_words = False
 | 
			
		||||
    data_source = "reply"
 | 
			
		||||
    only_spaces = False
 | 
			
		||||
 | 
			
		||||
    shuf_data = []
 | 
			
		||||
 | 
			
		||||
    i = 1
 | 
			
		||||
    
 | 
			
		||||
    # parsing arguments
 | 
			
		||||
    while i < l:
 | 
			
		||||
        print("C", i, cmd[i])
 | 
			
		||||
        if cmd[i][0] != "-" or cmd[i] == "--":
 | 
			
		||||
            break
 | 
			
		||||
        elif cmd[i] == "-i":
 | 
			
		||||
            shuf_individual_words = True
 | 
			
		||||
        elif cmd[i] == "-c":
 | 
			
		||||
            split_by = "char"
 | 
			
		||||
        elif cmd[i] == "-o":
 | 
			
		||||
            only_spaces = True
 | 
			
		||||
        i += 1
 | 
			
		||||
 | 
			
		||||
    # parsing text (if any)
 | 
			
		||||
    while i < l:
 | 
			
		||||
        print("T", i, cmd[i])
 | 
			
		||||
        data_source = "internal"
 | 
			
		||||
        if split_by == "char":
 | 
			
		||||
            for c in cmd[i]:
 | 
			
		||||
                shuf_data.append(c)
 | 
			
		||||
            shuf_data.append(" ")
 | 
			
		||||
        elif split_by == "word":
 | 
			
		||||
            if shuf_individual_words:
 | 
			
		||||
                shuf_data.append(list(cmd[i]))
 | 
			
		||||
            else:
 | 
			
		||||
                shuf_data.append(cmd[i])
 | 
			
		||||
 | 
			
		||||
        i += 1
 | 
			
		||||
 | 
			
		||||
    if data_source == "reply":
 | 
			
		||||
        seps = extract_separators(message['reply_to_message'].text)
 | 
			
		||||
    else:
 | 
			
		||||
        seps = extract_separators(message.text)
 | 
			
		||||
 | 
			
		||||
    if data_source == "reply":
 | 
			
		||||
        for w in message['reply_to_message'].text.split():
 | 
			
		||||
            if split_by == "char":
 | 
			
		||||
                for c in w:
 | 
			
		||||
                    shuf_data.append(c)
 | 
			
		||||
            elif split_by == "word":
 | 
			
		||||
                if shuf_individual_words:
 | 
			
		||||
                    shuf_data.append(list(w))
 | 
			
		||||
                else:
 | 
			
		||||
                    shuf_data.append(w)
 | 
			
		||||
 | 
			
		||||
    if split_by == "word":
 | 
			
		||||
        if shuf_individual_words:
 | 
			
		||||
            for w in shuf_data:
 | 
			
		||||
                random.shuffle(w)
 | 
			
		||||
 | 
			
		||||
            if only_spaces:
 | 
			
		||||
                return " ".join(["".join(w) for w in shuf_data]), "HTML"
 | 
			
		||||
            else:
 | 
			
		||||
                return "".join([i[0] + i[1] for i in zip(["".join(w) for w in shuf_data], seps)]) + "".join(shuf_data[-1]), "HTML"
 | 
			
		||||
        else:
 | 
			
		||||
            random.shuffle(shuf_data)
 | 
			
		||||
 | 
			
		||||
            if only_spaces:
 | 
			
		||||
                return " ".join(shuf_data), "HTML"
 | 
			
		||||
            else:
 | 
			
		||||
                return "".join([i[0] + i[1] for i in zip(shuf_data, seps)]) + shuf_data[-1], "HTML"
 | 
			
		||||
    elif split_by == "char":
 | 
			
		||||
        if only_spaces:
 | 
			
		||||
            shuf_data += [" " for i in seps]
 | 
			
		||||
        else:
 | 
			
		||||
            shuf_data += seps
 | 
			
		||||
 | 
			
		||||
        random.shuffle(shuf_data)
 | 
			
		||||
        return "".join(shuf_data), "HTML"
 | 
			
		||||
							
								
								
									
										6
									
								
								modules/shuffle/meta.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/shuffle/meta.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "start_on_boot": true,
 | 
			
		||||
    "alias": "shuffle",
 | 
			
		||||
    "version": 2,
 | 
			
		||||
    "index_file": "index.py"
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user