mirror of
https://github.com/miaowware/qrm2.git
synced 2024-11-15 20:51:56 -05:00
Merge pull request #165 from classabbyamp/5c-converter
echo: New converters for arguments
This commit is contained in:
commit
ac740ee679
34
common.py
34
common.py
@ -5,19 +5,15 @@ Copyright (C) 2019-2020 Abigail Gold, 0x5c
|
||||
|
||||
This file is part of discord-qrm2 and is released under the terms of the GNU
|
||||
General Public License, version 2.
|
||||
---
|
||||
|
||||
`colours`: Colours used by embeds.
|
||||
|
||||
`cat`: Category names for the HelpCommand.
|
||||
"""
|
||||
|
||||
|
||||
import collections
|
||||
import json
|
||||
import re
|
||||
import traceback
|
||||
from pathlib import Path
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from types import SimpleNamespace
|
||||
|
||||
import discord
|
||||
@ -26,7 +22,8 @@ import discord.ext.commands as commands
|
||||
import data.options as opt
|
||||
|
||||
|
||||
__all__ = ["colours", "cat", "emojis", "embed_factory", "error_embed_factory", "add_react", "check_if_owner"]
|
||||
__all__ = ["colours", "cat", "emojis", "paths", "ImageMetadata", "ImagesGroup",
|
||||
"embed_factory", "error_embed_factory", "add_react", "check_if_owner"]
|
||||
|
||||
|
||||
# --- Common values ---
|
||||
@ -94,6 +91,29 @@ class ImagesGroup(collections.abc.Mapping):
|
||||
return str(self._images)
|
||||
|
||||
|
||||
# --- Converters ---
|
||||
|
||||
class GlobalChannelConverter(commands.IDConverter):
|
||||
"""Converter to get any bot-acessible channel by ID/mention (global), or name (in current guild only)."""
|
||||
async def convert(self, ctx: commands.Context, argument: str):
|
||||
bot = ctx.bot
|
||||
guild = ctx.guild
|
||||
match = self._get_id_match(argument) or re.match(r'<#([0-9]+)>$', argument)
|
||||
result = None
|
||||
if match is None:
|
||||
# not a mention/ID
|
||||
if guild:
|
||||
result = discord.utils.get(guild.text_channels, name=argument)
|
||||
else:
|
||||
raise commands.BadArgument(f"""Channel named "{argument}" not found in this guild.""")
|
||||
else:
|
||||
channel_id = int(match.group(1))
|
||||
result = bot.get_channel(channel_id)
|
||||
if not isinstance(result, (discord.TextChannel, discord.abc.PrivateChannel)):
|
||||
raise commands.BadArgument(f"""Channel "{argument}" not found.""")
|
||||
return result
|
||||
|
||||
|
||||
# --- Helper functions ---
|
||||
|
||||
def embed_factory(ctx: commands.Context) -> discord.Embed:
|
||||
|
15
exts/base.py
15
exts/base.py
@ -7,17 +7,19 @@ This file is part of discord-qrm2 and is released under the terms of the GNU
|
||||
General Public License, version 2.
|
||||
"""
|
||||
|
||||
|
||||
import random
|
||||
import re
|
||||
from collections import OrderedDict
|
||||
import random
|
||||
from typing import Union
|
||||
|
||||
import discord
|
||||
import discord.ext.commands as commands
|
||||
|
||||
import info
|
||||
import common as cmn
|
||||
|
||||
import data.options as opt
|
||||
import common as cmn
|
||||
|
||||
|
||||
class QrmHelpCommand(commands.HelpCommand):
|
||||
@ -171,8 +173,13 @@ class BaseCog(commands.Cog):
|
||||
|
||||
@commands.command(name="echo", aliases=["e"], hidden=True)
|
||||
@commands.check(cmn.check_if_owner)
|
||||
async def _echo(self, ctx: commands.Context, channel: commands.TextChannelConverter, *, msg: str):
|
||||
"""Send a message in a channel as qrm. Only works within a server or DM to server, not between servers."""
|
||||
async def _echo(self, ctx: commands.Context,
|
||||
channel: Union[cmn.GlobalChannelConverter, commands.UserConverter], *, msg: str):
|
||||
"""Send a message in a channel as qrm. Accepts channel/user IDs/mentions.
|
||||
Channel names are current-guild only.
|
||||
Does not work with the ID of the bot user."""
|
||||
if isinstance(channel, discord.ClientUser):
|
||||
raise commands.BadArgument("Can't send to the bot user!")
|
||||
await channel.send(msg)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user