2019-10-04 20:07:58 -04:00
|
|
|
"""
|
|
|
|
Morse Code cog for qrm
|
|
|
|
---
|
2019-10-05 02:23:11 -04:00
|
|
|
Copyright (C) 2019 Abigail Gold, 0x5c
|
2019-10-04 20:07:58 -04:00
|
|
|
|
2019-10-05 02:23:11 -04:00
|
|
|
This file is part of discord-qrmbot and is released under the terms of the GNU
|
|
|
|
General Public License, version 2.
|
2019-10-04 20:07:58 -04:00
|
|
|
"""
|
|
|
|
|
|
|
|
import discord
|
|
|
|
import discord.ext.commands as commands
|
|
|
|
|
|
|
|
import json
|
2019-10-09 01:25:33 -04:00
|
|
|
from datetime import datetime
|
|
|
|
|
2019-10-04 20:07:58 -04:00
|
|
|
|
|
|
|
class MorseCog(commands.Cog):
|
|
|
|
def __init__(self, bot):
|
|
|
|
self.bot = bot
|
|
|
|
self.gs = bot.get_cog("GlobalSettings")
|
|
|
|
with open('resources/morse.json') as morse_file:
|
|
|
|
self.ascii2morse = json.load(morse_file)
|
|
|
|
self.morse2ascii = {v: k for k, v in self.ascii2morse.items()}
|
|
|
|
|
|
|
|
@commands.command(name="morse", aliases=['cw'])
|
2019-10-09 01:25:33 -04:00
|
|
|
async def _morse(self, ctx, *, msg: str):
|
2019-10-04 20:07:58 -04:00
|
|
|
"""Converts ASCII to international morse code."""
|
|
|
|
with ctx.typing():
|
|
|
|
result = ''
|
|
|
|
for char in msg.upper():
|
2019-10-12 19:50:40 -04:00
|
|
|
try:
|
2019-10-04 20:07:58 -04:00
|
|
|
result += self.ascii2morse[char]
|
2019-10-12 19:50:40 -04:00
|
|
|
except KeyError:
|
2019-10-04 20:07:58 -04:00
|
|
|
result += '<?>'
|
|
|
|
result += ' '
|
2019-10-09 01:25:33 -04:00
|
|
|
embed = discord.Embed(title=f'Morse Code for {msg}',
|
|
|
|
description=result,
|
|
|
|
colour=self.gs.colours.good,
|
|
|
|
timestamp=datetime.utcnow())
|
|
|
|
embed.set_footer(text=ctx.author.name,
|
|
|
|
icon_url=str(ctx.author.avatar_url))
|
2019-10-04 20:07:58 -04:00
|
|
|
await ctx.send(embed=embed)
|
|
|
|
|
|
|
|
@commands.command(name="unmorse", aliases=['demorse', 'uncw', 'decw'])
|
2019-10-09 01:25:33 -04:00
|
|
|
async def _unmorse(self, ctx, *, msg: str):
|
2019-10-04 20:07:58 -04:00
|
|
|
'''Converts international morse code to ASCII.'''
|
|
|
|
with ctx.typing():
|
|
|
|
result = ''
|
|
|
|
msg0 = msg
|
|
|
|
msg = msg.split('/')
|
|
|
|
msg = [m.split() for m in msg]
|
|
|
|
for word in msg:
|
|
|
|
for char in word:
|
2019-10-12 19:50:40 -04:00
|
|
|
try:
|
2019-10-04 20:07:58 -04:00
|
|
|
result += self.morse2ascii[char]
|
2019-10-12 19:50:40 -04:00
|
|
|
except KeyError:
|
2019-10-04 20:07:58 -04:00
|
|
|
result += '<?>'
|
|
|
|
result += ' '
|
2019-10-09 01:25:33 -04:00
|
|
|
embed = discord.Embed(title=f'ASCII for {msg0}',
|
|
|
|
description=result,
|
|
|
|
colour=self.gs.colours.good,
|
|
|
|
timestamp=datetime.utcnow())
|
|
|
|
embed.set_footer(text=ctx.author.name,
|
|
|
|
icon_url=str(ctx.author.avatar_url))
|
2019-10-04 20:07:58 -04:00
|
|
|
await ctx.send(embed=embed)
|
|
|
|
|
|
|
|
@commands.command(name="weight", aliases=["cwweight", 'cww'])
|
2019-10-09 01:25:33 -04:00
|
|
|
async def _weight(self, ctx, msg: str):
|
2019-10-04 20:07:58 -04:00
|
|
|
'''Calculates the CW Weight of a callsign.'''
|
|
|
|
with ctx.typing():
|
|
|
|
msg = msg.upper()
|
|
|
|
weight = 0
|
|
|
|
for char in msg:
|
2019-10-12 19:50:40 -04:00
|
|
|
try:
|
2019-10-04 20:07:58 -04:00
|
|
|
cwChar = self.ascii2morse[char].replace('-', '==')
|
|
|
|
weight += len(cwChar) * 2 + 2
|
2019-10-12 19:50:40 -04:00
|
|
|
except KeyError:
|
2019-10-04 20:07:58 -04:00
|
|
|
res = f'Unknown character {char} in callsign'
|
|
|
|
await ctx.send(res)
|
|
|
|
return
|
|
|
|
res = f'The CW weight is **{weight}**'
|
2019-10-09 01:25:33 -04:00
|
|
|
embed = discord.Embed(title=f'CW Weight of {msg}',
|
|
|
|
description=res,
|
|
|
|
colour=self.gs.colours.good,
|
|
|
|
timestamp=datetime.utcnow())
|
|
|
|
embed.set_footer(text=ctx.author.name,
|
|
|
|
icon_url=str(ctx.author.avatar_url))
|
2019-10-04 20:07:58 -04:00
|
|
|
await ctx.send(embed=embed)
|
|
|
|
|
|
|
|
|
|
|
|
def setup(bot):
|
|
|
|
bot.add_cog(MorseCog(bot))
|