mirror of
https://github.com/TeamPGM/PagerMaid_Plugins_Pyro.git
synced 2024-09-28 01:05:47 +00:00
morse 摩斯密码转换
Co-authored-by: xtaodada <xtao@xtaolink.cn>
This commit is contained in:
parent
23563fab38
commit
9f8f4e6d0a
3
.gitignore
vendored
3
.gitignore
vendored
@ -134,3 +134,6 @@ dmypy.json
|
||||
|
||||
# vscode
|
||||
.vscode/
|
||||
|
||||
# Pyright config
|
||||
pyrightconfig.json
|
||||
|
5
morse/DES.md
Normal file
5
morse/DES.md
Normal file
@ -0,0 +1,5 @@
|
||||
摩斯密码转换 (支持非英文)
|
||||
|
||||
指令:
|
||||
- `,enmorse <待转换文本>` (转换指定文本到摩斯密码)
|
||||
- `,demorse <摩斯密码>` (转换摩斯密码到明文)
|
115
morse/main.py
Normal file
115
morse/main.py
Normal file
@ -0,0 +1,115 @@
|
||||
# pyright: basic
|
||||
|
||||
# Solution is adapted from https://github.com/hustcc/xmorse.
|
||||
|
||||
from pagermaid.enums import Message
|
||||
from pagermaid.listener import listener
|
||||
|
||||
MORSE_DICT = {
|
||||
"A": "01",
|
||||
"B": "1000",
|
||||
"C": "1010",
|
||||
"D": "100",
|
||||
"E": "0",
|
||||
"F": "0010",
|
||||
"G": "110",
|
||||
"H": "0000",
|
||||
"I": "00",
|
||||
"J": "0111",
|
||||
"K": "101",
|
||||
"L": "0100",
|
||||
"M": "11",
|
||||
"N": "10",
|
||||
"O": "111",
|
||||
"P": "0110",
|
||||
"Q": "1101",
|
||||
"R": "010",
|
||||
"S": "000",
|
||||
"T": "1",
|
||||
"U": "001",
|
||||
"V": "0001",
|
||||
"W": "011",
|
||||
"X": "1001",
|
||||
"Y": "1011",
|
||||
"Z": "1100",
|
||||
"0": "11111",
|
||||
"1": "01111",
|
||||
"2": "00111",
|
||||
"3": "00011",
|
||||
"4": "00001",
|
||||
"5": "00000",
|
||||
"6": "10000",
|
||||
"7": "11000",
|
||||
"8": "11100",
|
||||
"9": "11110",
|
||||
".": "010101",
|
||||
",": "110011",
|
||||
"?": "001100",
|
||||
"'": "011110",
|
||||
"!": "101011",
|
||||
"/": "10010",
|
||||
"(": "10110",
|
||||
")": "101101",
|
||||
"&": "01000",
|
||||
":": "111000",
|
||||
";": "101010",
|
||||
"=": "10001",
|
||||
"+": "01010",
|
||||
"-": "100001",
|
||||
"_": "001101",
|
||||
'"': "010010",
|
||||
"$": "0001001",
|
||||
"@": "011010",
|
||||
}
|
||||
|
||||
REVERSED_MORSE_DICT = {v: k for k, v in MORSE_DICT.items()}
|
||||
|
||||
MORSE_SHORTS = ["."]
|
||||
MORSE_LONGS = ["-", "_"]
|
||||
MORSE_SPLITTERS = [" ", "/"]
|
||||
|
||||
|
||||
def encode(text: str) -> str:
|
||||
return MORSE_SPLITTERS[0].join(
|
||||
(MORSE_DICT.get(char.strip().upper()) or bin((ord(char)))[2:])
|
||||
.replace("0", MORSE_SHORTS[0])
|
||||
.replace("1", MORSE_LONGS[0])
|
||||
for char in text
|
||||
)
|
||||
|
||||
|
||||
def decode(morse: str) -> str:
|
||||
assert set(morse) <= frozenset(MORSE_SHORTS + MORSE_LONGS + MORSE_SPLITTERS)
|
||||
return "".join(
|
||||
REVERSED_MORSE_DICT.get(word) or chr(int(word, 2))
|
||||
for word in "".join(
|
||||
(
|
||||
" " if char in MORSE_SPLITTERS else str(int(char in MORSE_LONGS))
|
||||
for char in morse
|
||||
)
|
||||
).split(" ")
|
||||
)
|
||||
|
||||
|
||||
@listener(command="enmorse", description="转换指定文本到摩斯密码", parameters="[待转换文本]")
|
||||
async def enmorse(message: Message):
|
||||
if message.arguments:
|
||||
try:
|
||||
result = encode(message.arguments)
|
||||
except Exception:
|
||||
result = "呜呜呜 ~ 转换失败了,可能含有非法字符。"
|
||||
else:
|
||||
result = "请输入参数"
|
||||
await message.edit(f"`{result}`")
|
||||
|
||||
|
||||
@listener(command="demorse", description="转换摩斯密码到明文", parameters="[摩斯密码]")
|
||||
async def demorse(message: Message):
|
||||
if message.arguments:
|
||||
try:
|
||||
result = decode(message.arguments)
|
||||
except Exception:
|
||||
result = "呜呜呜 ~ 转换失败了,可能含有非法字符。"
|
||||
else:
|
||||
result = "请输入参数"
|
||||
await message.edit(f"`{result}`")
|
Loading…
Reference in New Issue
Block a user