Add macro cog (#24)
* Add macro cog * Adjust macro cooldown * Add macros.json to wanted_jsons --------- Co-authored-by: Mary <mary@mary.zone>
This commit is contained in:
parent
f10ab7bb50
commit
af92876835
3 changed files with 121 additions and 0 deletions
|
@ -46,6 +46,7 @@ wanted_jsons = [
|
||||||
"data/robocronptab.json",
|
"data/robocronptab.json",
|
||||||
"data/userlog.json",
|
"data/userlog.json",
|
||||||
"data/invites.json",
|
"data/invites.json",
|
||||||
|
"data/macros.json",
|
||||||
"data/persistent_roles.json"
|
"data/persistent_roles.json"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
65
robocop_ng/cogs/macro.py
Normal file
65
robocop_ng/cogs/macro.py
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from discord.ext import commands
|
||||||
|
from discord.ext.commands import Cog, Context, BucketType
|
||||||
|
|
||||||
|
from robocop_ng.helpers.checks import check_if_staff
|
||||||
|
from robocop_ng.helpers.macros import get_macro, add_macro, edit_macro, remove_macro, get_macros
|
||||||
|
|
||||||
|
|
||||||
|
class Macro(Cog):
|
||||||
|
@commands.cooldown(3, 30, BucketType.member)
|
||||||
|
@commands.command(aliases=["m"])
|
||||||
|
async def macro(self, ctx: Context, target: Optional[discord.Member], key: str):
|
||||||
|
if len(key) > 0:
|
||||||
|
text = get_macro(key)
|
||||||
|
if text is not None:
|
||||||
|
if target is not None:
|
||||||
|
await ctx.send(f"{target.mention}:\n{text}")
|
||||||
|
else:
|
||||||
|
await ctx.send(text)
|
||||||
|
else:
|
||||||
|
await ctx.send(f"{ctx.author.mention}: The macro '{key}' doesn't exist.")
|
||||||
|
|
||||||
|
@commands.check(check_if_staff)
|
||||||
|
@commands.command(name="macroadd", aliases=["ma", "addmacro", "add_macro"])
|
||||||
|
async def add_macro(self, ctx: Context, key: str, *, text: str):
|
||||||
|
if add_macro(key, text):
|
||||||
|
await ctx.send(f"Macro '{key}' added!")
|
||||||
|
else:
|
||||||
|
await ctx.send(f"Error: Macro '{key}' already exists.")
|
||||||
|
|
||||||
|
@commands.check(check_if_staff)
|
||||||
|
@commands.command(name="macroedit", aliases=["me", "editmacro", "edit_macro"])
|
||||||
|
async def edit_macro(self, ctx: Context, key: str, *, text: str):
|
||||||
|
if edit_macro(key, text):
|
||||||
|
await ctx.send(f"Macro '{key}' edited!")
|
||||||
|
else:
|
||||||
|
await ctx.send(f"Error: Macro '{key}' not found.")
|
||||||
|
|
||||||
|
@commands.check(check_if_staff)
|
||||||
|
@commands.command(name="macroremove", aliases=[
|
||||||
|
"mr", "md", "removemacro", "remove_macro", "macrodel", "delmacro", "delete_macro"
|
||||||
|
])
|
||||||
|
async def remove_macro(self, ctx: Context, key: str):
|
||||||
|
if remove_macro(key):
|
||||||
|
await ctx.send(f"Macro '{key}' removed!")
|
||||||
|
else:
|
||||||
|
await ctx.send(f"Error: Macro '{key}' not found.")
|
||||||
|
|
||||||
|
@commands.cooldown(3, 30, BucketType.channel)
|
||||||
|
@commands.command(name="macros", aliases=["ml", "listmacros", "list_macros"])
|
||||||
|
async def list_macros(self, ctx: Context):
|
||||||
|
macros = get_macros()
|
||||||
|
if len(macros) > 0:
|
||||||
|
await ctx.send(
|
||||||
|
"📝 **Macros**:\n"
|
||||||
|
"\n".join([f"- {key}" for key in macros.keys()])
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
await ctx.send("Couldn't find any macros.")
|
||||||
|
|
||||||
|
|
||||||
|
async def setup(bot):
|
||||||
|
await bot.add_cog(Macro(bot))
|
55
robocop_ng/helpers/macros.py
Normal file
55
robocop_ng/helpers/macros.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
MACROS_FILE = "data/macros.json"
|
||||||
|
|
||||||
|
|
||||||
|
def get_macros() -> dict[str, str]:
|
||||||
|
if os.path.isfile(MACROS_FILE):
|
||||||
|
with open(MACROS_FILE, "r") as f:
|
||||||
|
return json.load(f)
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def set_macros(contents: dict[str, str]):
|
||||||
|
with open(MACROS_FILE, "w") as f:
|
||||||
|
json.dump(contents, f)
|
||||||
|
|
||||||
|
|
||||||
|
def get_macro(key: str) -> Optional[str]:
|
||||||
|
macros = get_macros()
|
||||||
|
key = key.lower()
|
||||||
|
if key in macros.keys():
|
||||||
|
return macros[key]
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def add_macro(key: str, message: str) -> bool:
|
||||||
|
macros = get_macros()
|
||||||
|
key = key.lower()
|
||||||
|
if key not in macros.keys():
|
||||||
|
macros[key] = message
|
||||||
|
set_macros(macros)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def edit_macro(key: str, message: str) -> bool:
|
||||||
|
macros = get_macros()
|
||||||
|
key = key.lower()
|
||||||
|
if key in macros.keys():
|
||||||
|
macros[key] = message
|
||||||
|
set_macros(macros)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def remove_macro(key: str) -> bool:
|
||||||
|
macros = get_macros()
|
||||||
|
key = key.lower()
|
||||||
|
if key in macros.keys():
|
||||||
|
del macros[key]
|
||||||
|
set_macros(macros)
|
||||||
|
return True
|
||||||
|
return False
|
Loading…
Reference in a new issue