Пример #1
0
 async def get_overwrite(self,
                         channel: discord.Channel = None,
                         role_or_user=None,
                         permission=None):
     # The channel variable is optional simply because I'm too lazy to care
     # And because it was the easiest way to get this working in the intended way
     if channel is None or role_or_user is None:
         return None
     if permission is None:
         return channel.overwrites_for(role_or_user)
     # return discord.utils.find(lambda perm: perm == permission, channel.overwrites_for(role_or_user))
     for perm, overwrite in channel.overwrites_for(role_or_user):
         if perm == permission:
             return overwrite
 async def _update_overwrites(self,
                              channel: discord.Channel,
                              *,
                              unlock: bool = False):
     # Assuming the default role is always position 0.
     role = channel.server.default_role
     overwrite = channel.overwrites_for(role)
     overwrite.send_messages = None if unlock else False
     await self.bot.edit_channel_permissions(channel, role, overwrite)
Пример #3
0
 async def copyrole(self, ctx, role: discord.Role, src_channel: discord.Channel, *, des_channels):
     """Copy role permission from a channel to channels"""
     perms = src_channel.overwrites_for(role)
     converter = commands.ChannelConverter
     for c in des_channels.split():
         try:
             ch = converter(ctx, c).convert()
         except commands.errors.BadArgument as e:
             await self.bot.say(e)
             continue
         await self.bot.edit_channel_permissions(ch, role, overwrite=perms)
     await self.bot.say("Changed permissions successfully")
Пример #4
0
async def suspend(message: discord.Message, channel: discord.Channel=Annotate.Self):
    """ Suspends a channel by removing send permission for the server's default role. 
    This function acts like a toggle. """
    send = channel.overwrites_for(message.server.default_role).send_messages
    print(send, False if send is None else not send)
    overwrite = discord.PermissionOverwrite(send_messages=False if send is None else not send)
    await client.edit_channel_permissions(channel, message.server.default_role, overwrite)

    try:
        if overwrite.send_messages:
            await client.say(message, "{} is no longer suspended.".format(channel.mention))
        else:
            await client.say(message, "Suspended {}.".format(channel.mention))
    except discord.Forbidden:  # ...
        await client.send_message(message.author, "You just removed my send permission in {}.".format(channel.mention))
Пример #5
0
 async def _leave_channel(self, ctx, hidden_channel: discord.Channel):
     """
     退室を行います。
     隠れチャンネル#devを退室する例「!ch leave dev」
     DMから利用不可。
     """
     message = ctx.message
     member = message.author
     permission = hidden_channel.permissions_for(member)
     visible = permission.read_messages
     overwrite = hidden_channel.overwrites_for(member)
     if visible and not overwrite.is_empty():
         await self.bot.delete_channel_permissions(hidden_channel, member)
         await self.bot.say("{0.name}を退室しました。".format(hidden_channel),
                            delete_after=10)
     else:
         raise commands.BadArgument
Пример #6
0
 async def _join_channel(self, ctx, hidden_channel: discord.Channel):
     """
     入室を行います。
     隠れチャンネル#devへ入室する例「!ch join dev」
     DMから利用不可。
     """
     message = ctx.message
     member = message.author
     my_permission = hidden_channel.permissions_for(member)
     my_overwrite = hidden_channel.overwrites_for(member)
     visible = my_permission.read_messages
     if not visible and my_overwrite.is_empty():
         # 隠れch("everyoneのみ"不可視指定) -> overwriteで可視化
         if all([r.is_everyone for r in hidden_channel.changed_roles]):
             await self.bot.edit_channel_permissions(
                 hidden_channel, member, VISIBLE_OVERWRITE)
             await self.bot.say("{0.name}に入室しました。".format(hidden_channel),
                                delete_after=10)
             return
         # 役職限定ch(everyone不可視、特定の役職可視) -> 不正入力扱い
         else:
             raise commands.BadArgument
     #隠れチャンネルではない又は入室済み
     await self.bot.say("このチャンネルには入室済みです。", delete_after=10)
Пример #7
0
def _is_hidden(channel: discord.Channel):
    everyone_overwrite = channel.overwrites_for(channel.server.default_role)
    visible = everyone_overwrite.read_messages
    if visible is None:
        return False
    return not visible