mirror of
https://github.com/RGBCube/minearchy-bot
synced 2025-07-27 08:57:46 +00:00
Add channel perm tree command
This commit is contained in:
parent
c6daaf386f
commit
6834edf80e
1 changed files with 55 additions and 1 deletions
|
@ -3,11 +3,12 @@ from __future__ import annotations
|
||||||
from collections import defaultdict as DefaultDict, deque as Deque
|
from collections import defaultdict as DefaultDict, deque as Deque
|
||||||
from datetime import timedelta as TimeDelta
|
from datetime import timedelta as TimeDelta
|
||||||
from inspect import cleandoc as strip_doc
|
from inspect import cleandoc as strip_doc
|
||||||
|
from io import BytesIO
|
||||||
from platform import python_version
|
from platform import python_version
|
||||||
from time import monotonic as ping_time, time as current_time
|
from time import monotonic as ping_time, time as current_time
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from discord import Color, Embed, TextChannel
|
from discord import CategoryChannel, Color, Embed, TextChannel, File
|
||||||
from discord.ext.commands import Cog, command, has_permissions
|
from discord.ext.commands import Cog, command, has_permissions
|
||||||
from discord.utils import escape_markdown
|
from discord.utils import escape_markdown
|
||||||
|
|
||||||
|
@ -65,6 +66,59 @@ class Miscellaneous(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@command(hidden=True)
|
||||||
|
async def channel_perm_tree(self, ctx: Context) -> None:
|
||||||
|
def overwrites_list(overwrites: list) -> list[str]:
|
||||||
|
text: list[str] = []
|
||||||
|
|
||||||
|
for thing, overwrite in overwrites:
|
||||||
|
text.append(f"({type(thing)}) {thing.name}:")
|
||||||
|
|
||||||
|
allows, denies = overwrite.pair()
|
||||||
|
|
||||||
|
for allow in allows:
|
||||||
|
text.append(f" ✅ {allow[0]}")
|
||||||
|
for deny in denies:
|
||||||
|
text.append(f" ❌ {deny[0]}")
|
||||||
|
|
||||||
|
return text
|
||||||
|
|
||||||
|
text: list[str] = []
|
||||||
|
|
||||||
|
for channel in ctx.guild.channels:
|
||||||
|
if channel is CategoryChannel:
|
||||||
|
text.append(f"Category: {channel.name}")
|
||||||
|
|
||||||
|
# not a category and root level
|
||||||
|
elif channel.category is None:
|
||||||
|
text.append(f"Channel: {channel.name}")
|
||||||
|
|
||||||
|
# has a parent
|
||||||
|
else:
|
||||||
|
text.append(f" Channel: {channel.name}")
|
||||||
|
|
||||||
|
if (parent := getattr(channel, "category")) is None:
|
||||||
|
text.extend([" " + o for o in overwrites_list(channel.overwrites.items())])
|
||||||
|
else:
|
||||||
|
text.extend(
|
||||||
|
[
|
||||||
|
" " + o
|
||||||
|
for o in
|
||||||
|
overwrites_list(
|
||||||
|
channel.overwrites.items() - parent.overwrites.items()
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
await ctx.reply(
|
||||||
|
file=File(
|
||||||
|
BytesIO(
|
||||||
|
bytes("\n".join(text), "utf-8")
|
||||||
|
),
|
||||||
|
"perms.txt"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@command(
|
@command(
|
||||||
brief="Sets you as AFK.",
|
brief="Sets you as AFK.",
|
||||||
help="Sets you as AFK.",
|
help="Sets you as AFK.",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue