mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
Arguments for custom commands (#333)
This commit is contained in:
parent
a38cdf4a69
commit
6ba639f43b
@ -2,8 +2,10 @@ import discord
|
|||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from .utils.dataIO import fileIO
|
from .utils.dataIO import fileIO
|
||||||
from .utils import checks
|
from .utils import checks
|
||||||
|
from string import ascii_letters
|
||||||
from __main__ import user_allowed, send_cmd_help
|
from __main__ import user_allowed, send_cmd_help
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
class CustomCommands:
|
class CustomCommands:
|
||||||
"""Custom commands."""
|
"""Custom commands."""
|
||||||
@ -118,9 +120,13 @@ class CustomCommands:
|
|||||||
cmdlist = self.c_commands[server.id]
|
cmdlist = self.c_commands[server.id]
|
||||||
cmd = msg[len(prefix):]
|
cmd = msg[len(prefix):]
|
||||||
if cmd in cmdlist.keys():
|
if cmd in cmdlist.keys():
|
||||||
await self.bot.send_message(message.channel, cmdlist[cmd])
|
cmd = cmdlist[cmd]
|
||||||
|
cmd = self.format_cc(cmd, message)
|
||||||
|
await self.bot.send_message(message.channel, cmd)
|
||||||
elif cmd.lower() in cmdlist.keys():
|
elif cmd.lower() in cmdlist.keys():
|
||||||
await self.bot.send_message(message.channel, cmdlist[cmd.lower()])
|
cmd = cmdlist[cmd.lower()]
|
||||||
|
cmd = self.format_cc(cmd, message)
|
||||||
|
await self.bot.send_message(message.channel, cmd)
|
||||||
|
|
||||||
def get_prefix(self, msg):
|
def get_prefix(self, msg):
|
||||||
for p in self.bot.command_prefix:
|
for p in self.bot.command_prefix:
|
||||||
@ -128,6 +134,41 @@ class CustomCommands:
|
|||||||
return p
|
return p
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def format_cc(self, command, message):
|
||||||
|
results = re.findall("\{([^}]+)\}", command)
|
||||||
|
for result in results:
|
||||||
|
param = self.transform_parameter(result, message)
|
||||||
|
command = command.replace("{" + result + "}", param)
|
||||||
|
return command
|
||||||
|
|
||||||
|
def transform_parameter(self, result, message):
|
||||||
|
"""
|
||||||
|
This should be bomb proof. I eval only the base object, and only
|
||||||
|
if it's present in the allowed list. Only one depth level is allowed.
|
||||||
|
Only letters and dots are allowed.
|
||||||
|
"""
|
||||||
|
raw_result = "{" + result + "}"
|
||||||
|
author = message.author
|
||||||
|
channel = message.channel
|
||||||
|
server = author.server
|
||||||
|
valid_chars = ascii_letters + "."
|
||||||
|
allowed = ("message", "author", "server", "channel")
|
||||||
|
for char in result:
|
||||||
|
if char not in valid_chars:
|
||||||
|
return raw_result
|
||||||
|
if result in allowed:
|
||||||
|
return str(eval(result))
|
||||||
|
try:
|
||||||
|
first, second = result.split(".")
|
||||||
|
except ValueError:
|
||||||
|
return raw_result
|
||||||
|
if first in allowed:
|
||||||
|
first = eval(first)
|
||||||
|
else:
|
||||||
|
return raw_result
|
||||||
|
return str(getattr(first, second, raw_result))
|
||||||
|
|
||||||
|
|
||||||
def check_folders():
|
def check_folders():
|
||||||
if not os.path.exists("data/customcom"):
|
if not os.path.exists("data/customcom"):
|
||||||
print("Creating data/customcom folder...")
|
print("Creating data/customcom folder...")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user