mirror of
https://github.com/Rapptz/discord.py.git
synced 2025-06-07 12:18:59 +00:00
Add "Secret" channel/emoji example
This commit is contained in:
parent
66b834b332
commit
6c08f3d344
96
examples/secret.py
Normal file
96
examples/secret.py
Normal file
@ -0,0 +1,96 @@
|
||||
import typing
|
||||
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
bot = commands.Bot(command_prefix=commands.when_mentioned, description="Nothing to see here!")
|
||||
|
||||
# the `hidden` keyword argument hides it from the help command.
|
||||
@bot.group(hidden=True)
|
||||
async def secret(ctx: commands.Context):
|
||||
"""What is this "secret" you speak of?"""
|
||||
if ctx.invoked_subcommand is None:
|
||||
await ctx.send('Shh!', delete_after=5)
|
||||
|
||||
def create_overwrites(ctx, *objects):
|
||||
"""This is just a helper function that creates the overwrites for the
|
||||
voice/text channels.
|
||||
|
||||
A `discord.PermissionOverwrite` allows you to determine the permissions
|
||||
of an object, whether it be a `discord.Role` or a `discord.Member`.
|
||||
|
||||
In this case, the `view_channel` permission is being used to hide the channel
|
||||
from being viewed by whoever does not meet the criteria, thus creating a
|
||||
secret channel.
|
||||
"""
|
||||
|
||||
# a dict comprehension is being utilised here to set the same permission overwrites
|
||||
# for each `discord.Role` or `discord.Member`.
|
||||
overwrites = {
|
||||
obj: discord.PermissionOverwrite(view_channel=True)
|
||||
for obj in objects
|
||||
}
|
||||
|
||||
# prevents the default role (@everyone) from viewing the channel
|
||||
# if it isn't already allowed to view the channel.
|
||||
overwrites.setdefault(ctx.guild.default_role, discord.PermissionOverwrite(view_channel=False))
|
||||
|
||||
# makes sure the client is always allowed to view the channel.
|
||||
overwrites[ctx.guild.me] = discord.PermissionOverwrite(view_channel=True)
|
||||
|
||||
return overwrites
|
||||
|
||||
# since these commands rely on guild related features,
|
||||
# it is best to lock it to be guild-only.
|
||||
@secret.command()
|
||||
@commands.guild_only()
|
||||
async def text(ctx: commands.Context, name: str, *objects: typing.Union[discord.Role, discord.Member]):
|
||||
"""This makes a text channel with a specified name
|
||||
that is only visible to roles or members that are specified.
|
||||
"""
|
||||
|
||||
overwrites = create_overwrites(ctx, *objects)
|
||||
|
||||
await ctx.guild.create_text_channel(
|
||||
name,
|
||||
overwrites=overwrites,
|
||||
topic='Top secret text channel. Any leakage of this channel may result in serious trouble.',
|
||||
reason='Very secret business.',
|
||||
)
|
||||
|
||||
@secret.command()
|
||||
@commands.guild_only()
|
||||
async def voice(ctx: commands.Context, name: str, *objects: typing.Union[discord.Role, discord.Member]):
|
||||
"""This does the same thing as the `text` subcommand
|
||||
but instead creates a voice channel.
|
||||
"""
|
||||
|
||||
overwrites = create_overwrites(ctx, *objects)
|
||||
|
||||
await ctx.guild.create_voice_channel(
|
||||
name,
|
||||
overwrites=overwrites,
|
||||
reason='Very secret business.'
|
||||
)
|
||||
|
||||
@secret.command()
|
||||
@commands.guild_only()
|
||||
async def emoji(ctx: commands.Context, emoji: discord.PartialEmoji, *roles: discord.Role):
|
||||
"""This clones a specified emoji that only specified roles
|
||||
are allowed to use.
|
||||
"""
|
||||
|
||||
# fetch the emoji asset and read it as bytes.
|
||||
emoji_bytes = await emoji.url.read()
|
||||
|
||||
# the key parameter here is `roles`, which controls
|
||||
# what roles are able to use the emoji.
|
||||
await ctx.guild.create_custom_emoji(
|
||||
name=emoji.name,
|
||||
image=emoji_bytes,
|
||||
roles=roles,
|
||||
reason='Very secret business.'
|
||||
)
|
||||
|
||||
|
||||
bot.run('token')
|
Loading…
x
Reference in New Issue
Block a user