Resolve merge conflict and add telegram forwarder
This commit is contained in:
commit
1ce7ea15d9
18 files changed
+391
-7
No files matched your search
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
gifs/
|
gifs/
|
||||||
credentials.env
|
credentials.env
|
||||||
.vscode/
|
.vscode/__pycache__/
|
||||||
+317
@@ -0,0 +1,317 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "commands",
|
||||||
|
"importPath": "discord.ext",
|
||||||
|
"description": "discord.ext",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "discord.ext",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "random",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "random",
|
||||||
|
"description": "random",
|
||||||
|
"detail": "random",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "discord",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "discord",
|
||||||
|
"description": "discord",
|
||||||
|
"detail": "discord",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "io",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "io",
|
||||||
|
"description": "io",
|
||||||
|
"detail": "io",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "os",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "os",
|
||||||
|
"description": "os",
|
||||||
|
"detail": "os",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "subprocess",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "subprocess",
|
||||||
|
"description": "subprocess",
|
||||||
|
"detail": "subprocess",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "re",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "re",
|
||||||
|
"description": "re",
|
||||||
|
"detail": "re",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "psutil",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "psutil",
|
||||||
|
"description": "psutil",
|
||||||
|
"detail": "psutil",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "aiohttp",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "aiohttp",
|
||||||
|
"description": "aiohttp",
|
||||||
|
"detail": "aiohttp",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "wavelink",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "wavelink",
|
||||||
|
"description": "wavelink",
|
||||||
|
"detail": "wavelink",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "asyncio",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "asyncio",
|
||||||
|
"description": "asyncio",
|
||||||
|
"detail": "asyncio",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "deque",
|
||||||
|
"importPath": "collections",
|
||||||
|
"description": "collections",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "collections",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "load_dotenv",
|
||||||
|
"importPath": "dotenv",
|
||||||
|
"description": "dotenv",
|
||||||
|
"isExtraImport": true,
|
||||||
|
"detail": "dotenv",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "logging",
|
||||||
|
"kind": 6,
|
||||||
|
"isExtraImport": true,
|
||||||
|
"importPath": "logging",
|
||||||
|
"description": "logging",
|
||||||
|
"detail": "logging",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Fun",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "cogs.chance",
|
||||||
|
"description": "cogs.chance",
|
||||||
|
"peekOfCode": "class Fun(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n # this command lists all the fun commands, not an actualy fun command##\n @commands.command()\n async def fun(self, ctx):\n fun_commands = [f'!{cmd.name}' for cmd in self.get_commands() if cmd.name != 'fun']\n await ctx.reply('\\n'.join(sorted(fun_commands)))\n ######################################################################\n @commands.command()",
|
||||||
|
"detail": "cogs.chance",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Copypasta",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "cogs.copypasta",
|
||||||
|
"description": "cogs.copypasta",
|
||||||
|
"peekOfCode": "class Copypasta(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n # this command lists all the copypasta commands, not an actualy copypasta command##\n @commands.command()\n async def copypasta(self, ctx):\n pasta_commands = [f'!{cmd.name}' for cmd in self.get_commands() if cmd.name != 'copypasta']\n await ctx.reply('\\n'.join(sorted(pasta_commands)))\n ######################################################################\n @commands.command()",
|
||||||
|
"detail": "cogs.copypasta",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "General",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "cogs.general",
|
||||||
|
"description": "cogs.general",
|
||||||
|
"peekOfCode": "class General(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n @commands.command()\n async def yuuka(self, ctx):\n await ctx.send('kanpeki!')\nasync def setup(bot):\n await bot.add_cog(General(bot))\[email protected]()\nasync def on_command_error(self, ctx, error):",
|
||||||
|
"detail": "cogs.general",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Gifs",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "cogs.gifs",
|
||||||
|
"description": "cogs.gifs",
|
||||||
|
"peekOfCode": "class Gifs(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n self._gif_names = []\n self._load_gif_commands()\n def _load_gif_commands(self):\n if not os.path.exists('gifs'):\n return\n for filename in os.listdir('gifs'):\n if filename.endswith('.gif'):",
|
||||||
|
"detail": "cogs.gifs",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "SysInfo",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "cogs.sysinfo",
|
||||||
|
"description": "cogs.sysinfo",
|
||||||
|
"peekOfCode": "class SysInfo(commands.Cog):\n def __init__(self, bot):\n self.bot = bot\n def strip_ansi(self, text):\n return re.sub(r'\\x1b\\[[0-9;]*[a-zA-Z]|\\[[0-9]+[A-Z]', '', text)\n #this command lists all the sysinfo commands, not an actualy sysinfo command##\n @commands.command()\n async def sysinfo(self, ctx):\n sys_commands = [f'!{cmd.name}' for cmd in self.get_commands()]\n await ctx.reply('\\n'.join(sys_commands))",
|
||||||
|
"detail": "cogs.sysinfo",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "GuildState",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "class GuildState:\n def __init__(self):\n self.queue: deque = deque()\n self.history: list = [] # last 10 tracks\n self.loop: int = LOOP_OFF\n self.autoplay: bool = False\n self.current: wavelink.Playable | None = None\n def push_history(self, track: wavelink.Playable):\n self.history.insert(0, track)\n if len(self.history) > 10:",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Music",
|
||||||
|
"kind": 6,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "class Music(commands.Cog):\n def __init__(self, bot: commands.Bot):\n self.bot = bot\n self._states: dict[int, GuildState] = {}\n def state(self, guild_id: int) -> GuildState:\n if guild_id not in self._states:\n self._states[guild_id] = GuildState()\n return self._states[guild_id]\n # ── connect lavalink ─────────────────────────────────────────────────────\n @commands.Cog.listener()",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "fmt_duration",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "def fmt_duration(ms: int) -> str:\n s = ms // 1000\n m, s = divmod(s, 60)\n h, m = divmod(m, 60)\n return f\"{h}:{m:02}:{s:02}\" if h else f\"{m}:{s:02}\"\ndef progress_bar(position_ms: int, duration_ms: int, width: int = 14) -> str:\n if duration_ms == 0:\n return \"▬\" * width\n pct = min(position_ms / duration_ms, 1.0)\n filled = int(pct * width)",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "progress_bar",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "def progress_bar(position_ms: int, duration_ms: int, width: int = 14) -> str:\n if duration_ms == 0:\n return \"▬\" * width\n pct = min(position_ms / duration_ms, 1.0)\n filled = int(pct * width)\n return \"▬\" * filled + \"🔘\" + \"▬\" * (width - filled)\ndef is_dj():\n \"\"\"Soft DJ check — allows anyone to use info/play, restricts control commands.\"\"\"\n async def predicate(ctx: commands.Context):\n if any(r.name.lower() == \"dj\" for r in ctx.author.roles):",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "is_dj",
|
||||||
|
"kind": 2,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "def is_dj():\n \"\"\"Soft DJ check — allows anyone to use info/play, restricts control commands.\"\"\"\n async def predicate(ctx: commands.Context):\n if any(r.name.lower() == \"dj\" for r in ctx.author.roles):\n return True\n await ctx.reply(\n embed=discord.Embed(\n description=\"🎧 You need the **DJ** role to use this command.\",\n color=C_ERR,\n )",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "LOOP_TRACK",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "LOOP_TRACK = 1\nLOOP_QUEUE = 2\nLOOP_LABEL = {\n LOOP_OFF: \"Off\",\n LOOP_TRACK: \"🔂 Track\",\n LOOP_QUEUE: \"🔁 Queue\",\n}\n# ── per-guild state ──────────────────────────────────────────────────────────\nclass GuildState:\n def __init__(self):",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "LOOP_QUEUE",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "LOOP_QUEUE = 2\nLOOP_LABEL = {\n LOOP_OFF: \"Off\",\n LOOP_TRACK: \"🔂 Track\",\n LOOP_QUEUE: \"🔁 Queue\",\n}\n# ── per-guild state ──────────────────────────────────────────────────────────\nclass GuildState:\n def __init__(self):\n self.queue: deque = deque()",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "LOOP_LABEL",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "music.music",
|
||||||
|
"description": "music.music",
|
||||||
|
"peekOfCode": "LOOP_LABEL = {\n LOOP_OFF: \"Off\",\n LOOP_TRACK: \"🔂 Track\",\n LOOP_QUEUE: \"🔁 Queue\",\n}\n# ── per-guild state ──────────────────────────────────────────────────────────\nclass GuildState:\n def __init__(self):\n self.queue: deque = deque()\n self.history: list = [] # last 10 tracks",
|
||||||
|
"detail": "music.music",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "intents",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "main",
|
||||||
|
"description": "main",
|
||||||
|
"peekOfCode": "intents = discord.Intents.default()\nintents.message_content = True\nbot = commands.Bot(command_prefix='!', intents=intents)\[email protected]\nasync def on_ready():\n print(f'✅ {bot.user} is online!')\nasync def main():\n async with bot:\n await bot.load_extension('cogs.general')\n await bot.load_extension('cogs.chance')",
|
||||||
|
"detail": "main",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "intents.message_content",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "main",
|
||||||
|
"description": "main",
|
||||||
|
"peekOfCode": "intents.message_content = True\nbot = commands.Bot(command_prefix='!', intents=intents)\[email protected]\nasync def on_ready():\n print(f'✅ {bot.user} is online!')\nasync def main():\n async with bot:\n await bot.load_extension('cogs.general')\n await bot.load_extension('cogs.chance')\n await bot.load_extension('cogs.gifs')",
|
||||||
|
"detail": "main",
|
||||||
|
"documentation": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "bot",
|
||||||
|
"kind": 5,
|
||||||
|
"importPath": "main",
|
||||||
|
"description": "main",
|
||||||
|
"peekOfCode": "bot = commands.Bot(command_prefix='!', intents=intents)\[email protected]\nasync def on_ready():\n print(f'✅ {bot.user} is online!')\nasync def main():\n async with bot:\n await bot.load_extension('cogs.general')\n await bot.load_extension('cogs.chance')\n await bot.load_extension('cogs.gifs')\n await bot.load_extension('cogs.copypasta')",
|
||||||
|
"detail": "main",
|
||||||
|
"documentation": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -21,4 +21,4 @@ Personal Discord bot running on my Arch Linux laptop. Named after Hayase Yuuka.
|
|||||||
- `!music` — full music command list
|
- `!music` — full music command list
|
||||||
- `!sysinfo` — full sysinfo command list
|
- `!sysinfo` — full sysinfo command list
|
||||||
- `!gifs` — full gif list
|
- `!gifs` — full gif list
|
||||||
- `!copypasta` — full copypasta list
|
- `!help` — everything else
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -53,6 +53,64 @@ If the whole universe is for Yuuka , then I am for the whole universe. If the wh
|
|||||||
I will love, cherish, and protect Yuuka until my very last breath; my successors will love, cherish and protect Yuuka until their very last breath.""")
|
I will love, cherish, and protect Yuuka until my very last breath; my successors will love, cherish and protect Yuuka until their very last breath.""")
|
||||||
await ctx.reply(file=discord.File(io.StringIO(pasta), filename='yuukapasta.txt'))
|
await ctx.reply(file=discord.File(io.StringIO(pasta), filename='yuukapasta.txt'))
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
async def yuyuko(self, ctx):
|
||||||
|
pasta = r"""⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠶⢒⣶⠏⠀⠀⢸⣦⣀⣀⠀⠀⠀⣀⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠟⠉⠀⢀⡾⠃⠀⠀⠀⠀⣿⠛⠛⠛⠛⠛⠛⠉⠛⠛⠛⠶⢤⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⠾⠋⠀⠀⠀⣠⡟⠁⠀⡀⠀⠀⠀⢹⡆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠁⠀⠀⠀⠀⣰⠟⣤⣾⡿⠿⣿⣆⠀⠀⢿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⢶⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠁⠀⠀⠀⠀⠀⣴⣯⣾⡿⣿⠟⣳⢻⣿⡆⠀⠈⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠟⠁⠀⠀⠀⠀⠀⠀⣼⢻⣿⡟⠰⣿⣟⣉⣼⣿⠃⠀⠀⠀⠻⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣄⣀⠀⠀⠀⠀⠀⠙⣿⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠋⠀⠀⠀⠀⠀⠀⠀⢸⡇⣿⣿⠀⠀⠙⠛⣟⠛⠁⠀⠀⠀⠀⠀⠈⠻⣷⡀⠀⠀⠀⠀⠀⣠⣾⣿⠿⠛⠁⠀⠀⠀⠀⠀⢹⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠸⣇⢿⣿⣀⣤⣶⣿⠿⠿⣿⣶⣶⣶⣿⠗⠀⣀⣹⡿⠶⠦⣤⠶⢿⣿⣭⣤⣶⣶⣿⣯⣤⣤⣤⣶⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⡟⠀⠀⠀⠀⠀⠲⠶⣶⣦⣤⣤⣿⣈⣿⠿⠿⢭⣤⣀⣀⣠⣬⠿⣿⣿⣿⣿⣿⣿⠿⠟⠛⠉⠛⢛⠉⠙⠛⠿⣿⣿⡉⠉⠛⠿⣿⣿⣿⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣆⠀⠀⢠⣿⣿⣿⣿⣿⣿⣿⣿⠿⠋⠁⠀⢀⣴⡿⠟⠋⠉⠀⠀⠀⠀⢸⣿⣯⣤⣄⣀⠀⠀⠀⣼⠀⠀⠀⠀⠀⠙⣻⣦⣄⠀⠈⠙⠻⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⣠⣤⣤⣄⣀⠀⠀⠀⠀⠀⠀⠈⠻⢿⣶⣶⣾⡿⠟⠛⣻⡿⠋⠁⠀⠀⠀⢠⣾⢿⣿⣿⣷⣦⣄⠀⠀⠀⠀⠙⢿⣿⣿⣿⣿⣷⣦⣟⣤⣤⣶⣾⣿⣿⣿⣿⣿⡂⠀⠀⠀⠀⠙⢷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⢸⣿⣏⠉⠛⠻⢿⣷⡀⠀⠀⠀⠀⢀⣠⡶⠟⠉⢀⣴⣞⣋⠀⠀⠀⠀⠀⢠⡟⠁⠀⠙⢿⣿⣿⣿⣿⣦⣄⡀⠀⣿⠟⣛⣿⣿⣟⣻⣿⣿⣿⣿⣿⣿⣿⣿⠿⢿⣷⡄⠀⠀⠀⠀⠀⣙⣷⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠙⠿⣷⣦⡄⠀⠉⠁⠀⢀⣤⠾⠛⠁⠀⠀⠀⣾⣿⣿⣿⣿⣷⣶⣤⣀⡟⣀⣠⣤⣶⣿⣿⣿⠛⣿⣏⠉⠛⠶⢶⡟⢩⡽⣯⠉⠉⠉⠛⠛⠛⠿⢿⣿⣿⣦⣤⣙⣿⣤⣶⣶⣿⣿⣿⡿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⣀⣤⣄⣀⣉⡁⠀⢀⣠⣾⣋⡁⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣯⣩⣿⣟⣻⠉⢿⣷⣌⠻⣷⣾⣿⣿⣦⡀⠀⠙⢷⣅⠘⣷⠀⠀⠀⢀⣼⠃⡈⢷⡈⣿⣿⣿⣿⣿⣿⣿⣿⣿⡟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⢸⣿⡋⠙⠛⠻⢿⣷⢸⣿⣿⣿⣿⣿⣷⣶⣦⣤⣀⣀⣤⣾⣿⣿⣿⣿⣿⡟⢿⣿⡿⢶⣆⠙⠻⣷⣮⣿⣿⣿⣿⣿⣿⣷⣞⣛⣛⣿⣧⣴⣾⡿⠃⣿⣿⣾⣇⠸⣿⣿⣿⣯⣻⣿⣿⣿⣽⣿⠆⢀⣤⣶⡤⠀⠀⠀⠒⢾⣷⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠈⢿⣷⣄⠀⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡏⠁⢸⣿⣿⣧⡾⠻⣿⣦⣽⣧⡀⠘⣿⣟⠛⠛⢛⣻⣿⣯⣉⠉⠉⢻⣿⡋⠁⣰⣟⡏⢻⣿⣿⠀⢿⡟⣿⣿⣿⣿⣿⡟⠋⠁⠀⢸⣿⡋⠀⠀⠀⣠⣶⣿⠟⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠙⠻⢿⡆⠀⠀⠀⠀⢻⣿⣿⣿⣿⣿⣿⣿⡿⠋⠁⠘⣿⣧⠈⣿⣿⣟⠁⠀⠈⠻⣿⣿⣿⣶⣾⣿⣷⣆⠛⣋⣡⣤⣭⣤⣀⡀⢻⡇⢠⣿⠉⠁⣼⣿⣿⣄⣸⡇⠸⣿⣿⣿⣿⣷⣄⠀⠀⠈⠉⠀⠀⢰⣾⡿⠋⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⢿⣿⣿⣿⣿⣿⣿⢻⣷⡀⢤⠘⢿⣿⣿⣛⣿⣆⠐⠚⢛⡈⠻⢿⣿⣿⠿⠿⢿⣿⣿⠿⠛⠛⠙⠛⠻⣾⣧⣾⠏⢀⣼⣿⣿⣿⣿⡻⣯⠀⢹⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣷⣶⣿⣿⣿⣿⣿⣿⣸⣿⡟⠛⠃⠘⣿⣿⣏⣛⣿⣷⣿⣿⣿⣷⣄⠉⠁⠀⠀⠀⠉⠀⠀⣠⣆⡀⣀⣴⣿⣿⣿⣾⣿⣿⣿⣿⣿⣿⣿⡼⣧⢰⣿⣿⣿⣿⣹⣿⠀⠀⠀⠀⠀⠀⠀⢀⡄⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠻⣿⣿⣿⣿⣿⣿⣿⣯⠛⠀⠀⣦⡙⣿⣯⣿⡿⠟⠋⠁⠀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠚⠻⠋⠙⣿⣿⣿⣿⣿⣿⣿⣿⠟⣿⣿⣿⠙⣿⣿⢻⣙⠿⣿⣿⣿⡿⠀⠀⠸⠗⠁⢀⣴⣷⠇⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣩⣿⣿⠿⢋⣿⣿⣷⡀⠀⠙⣿⣿⣿⣷⣀⣠⣤⠆⠀⠀⠀⠀⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⡿⠋⢱⡟⠁⢠⣿⣿⡏⣰⣿⣿⣷⣝⠇⠙⢿⣏⠀⢀⡀⠀⢠⣶⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⣼⡿⢿⣿⣿⣶⣤⣈⣻⣿⣿⣿⠻⠋⠀⠀⠀⠀⠀⠀⢀⣀⣤⡴⢶⠀⠀⠀⠀⣼⣿⠏⠀⠀⠀⠀⣰⡿⣿⣿⣶⣿⣿⣿⣿⣿⣿⣶⣶⣬⣿⣿⠃⠀⠀⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⠃⠀⠙⣿⠛⣿⣍⠻⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⢸⣿⠋⠀⢀⣼⠃⣤⣄⣴⣿⠁⠀⣠⣴⣦⣾⠋⢰⣿⣿⣿⣿⣿⣿⣿⣿⣿⠿⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⢰⡏⡄⣿⣿⣆⠙⢿⣿⣿⣷⣦⣄⡀⠀⠀⠀⠉⠛⠛⠋⠁⠀⠀⣩⣿⣿⣠⣿⣿⣿⣿⠁⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡀⠀⠈⢹⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣿⣤⣠⡟⠉⣱⡿⣿⣿⣷⣦⡙⠿⣿⡛⠿⣿⣷⣶⣤⣀⡀⠀⠀⠀⢀⣶⣿⣿⣿⣿⣿⣿⣿⣿⣇⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠒⠟⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠾⣦⣤⣽⠿⢋⣠⣴⣿⣳⣿⣿⣿⣿⣿⣷⣾⣿⣦⠈⠙⢿⣿⣿⠉⠛⠶⠶⠟⠁⠘⣿⣿⣿⣿⡿⠿⣿⣿⣷⣿⣯⡻⣿⣿⣿⣿⣿⠁⣿⠇⠀⢀⣀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣀⠀⠀⢀⣴⣿⣿⢷⣛⣯⣽⣿⣿⣿⣿⠟⣸⣿⣿⠟⢻⣿⣷⡀⠀⢸⣿⢻⡇⠀⠀⠀⠀⠀⠀⣼⢿⣿⣿⣧⣀⣀⠈⠙⠛⠻⠿⠿⣿⣿⣿⣿⡷⠿⠛⠛⠉⠉⠉⠉⠙⠻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⣠⣴⠶⠶⣤⣠⡾⠋⠁⠀⢹⡇⠀⣿⣿⣿⡷⠛⠉⠀⠀⠀⠀⠉⠻⢿⣿⠿⠷⣦⣾⣿⣿⡇⠀⣼⣿⢸⣧⡀⠀⠀⠀⠀⣸⠏⠀⠉⠛⠛⠋⠉⠀⠀⠀⠀⠀⠀⣠⣴⠟⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣌⢿⣄⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⣾⠋⠀⠀⠀⠀⠉⠀⠀⠀⠀⣸⠇⠀⢈⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠳⣦⣿⣷⣿⣿⣡⡾⠿⠋⠘⠹⣇⠀⠀⠀⣰⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⠾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⢿⣄⡀⠀⠀⠀⠀⠀⠀⢀⣼⠏⠀⠀⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢷⣄⡉⠀⠀⠀⠀⠀⠀⠻⠀⠀⢰⡟⠀⠀⠀⠀⠀⢀⣀⣤⡶⠞⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⣷⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠉⠛⠳⢶⣤⣀⡀⢀⡾⠃⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠳⢦⣤⣀⠀⠀⠀⠀⠀⡟⠀⢀⣀⣤⡶⠞⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡄⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⠇⠀⠀⠀⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⢷⡄⠀⠀⣰⡟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠻⠦⠾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⢀⣀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢿⣟⡷⢿⡆⢸⣇⠀⠀⠀⠀⠀⠀⢰⣿⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣧⡟⠙⢷⡀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⣿⠟⠀⠀⢿⣶⣄⠀⠀⠀⠀⢀⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⡇⠀⢸⣧⣄⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠀⠀⠀⠘⣷⠙⠳⠶⢤⣶⡿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢰⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣬⡿⢸⡇⠀⢀⣠⡿⠁
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣸⡧⠤⠶⠟⠛⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢻⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣿⠇⠿⠶⠛⠋⠉⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⣀⣤⣤⣤⣄⣀⣀⣀⣤⠶⠛⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⢀⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢷⣄⠀⠀⠀⠀⠀⢀⣠⡿⢱⡟⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⣤⡶⠛⠉⠀⣶⣤⡀⠉⠉⠛⣷⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⣿⡾⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠻⣶⣤⣤⡶⠟⠋⢠⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⣼⠃⠀⠀⠀⠀⠘⣿⣽⣷⣆⠀⠘⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢷⣄⠀⢀⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢠⡾⠋⠀⠈⠻⣦⡀⠀⠹⣦⠀⢻⣆⠀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⡤⠤⣤⣀⣀⠀⠀⠀⠙⢷⣾⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⣸⡇⢰⣤⡀⠀⠈⠻⣦⣀⠙⢷⣄⠙⠳⠾⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⠾⠋⠉⡀⠀⠀⠀⠈⠉⠙⠛⠛⠒⠒⠛⠳⣦⣀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⣿⣷⠈⢿⣿⣦⡀⠀⠙⠿⣷⣦⣙⢷⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠟⠉⣀⣤⣶⠿⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣷⡀⠀⠀⠀⠀⠀⠀
|
||||||
|
⢻⣿⣧⠀⠻⣿⡻⣦⣄⡀⠈⠻⢿⣿⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣯⣶⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⡇⠀⠀⠀⠀⠀⠀
|
||||||
|
⠘⣿⣿⣷⣄⠈⠛⠶⢿⣿⣷⣶⣤⣝⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣟⣤⡾⠋⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣿⠃⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠘⢷⡽⠿⠷⢦⣤⣤⣤⣉⣙⣻⡎⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢈⣽⠟⠉⠀⢀⣠⣤⣶⣿⠿⠛⠀⠀⠀⠀⠀⠀⠀⣀⣤⡴⢾⣿⣽⢿⡏⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⢸⠟⠓⠚⠛⠛⠛⠉⠁⠈⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠿⣥⣤⣶⣿⣿⣿⠟⠋⠀⠀⠀⠀⠀⠀⠀⢀⣴⠟⠋⣁⣼⣿⣯⣄⢸⡇⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⢸⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢾⣧⡴⠾⢻⣏⠁⣿⣄⣠⣤⣴⡶⠾⠓⠒⢀⣴⠟⢁⣤⣾⡿⠛⠉⢀⡿⣸⠇⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠸⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⠋⠀⣿⢹⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⢿⣿⣯⣤⣤⠶⠖⠿⠋⣡⣾⡿⠛⠁⠀⠀⢀⣾⢃⡿⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠹⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡴⠟⠁⠀⠀⢹⡆⠹⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠛⠛⠛⠛⠛⠛⠉⠀⠀⠀⠀⢠⡾⣡⡿⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠈⠻⣶⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⡴⠞⠋⠀⠀⠀⢀⣠⡟⢻⣆⠈⠻⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣴⣟⡴⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠙⠻⢿⣶⣦⣤⣄⣀⣀⠀⠀⠀⠀⢀⣀⣠⣤⠴⠶⠞⠛⠉⠁⠀⠀⠀⣀⣠⡶⠟⠁⠀⠀⠙⢷⣄⠈⠙⢷⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣴⣾⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠛⠿⠿⢿⣭⣅⣀⣀⣀⣀⣀⣀⣀⣀⣠⣤⡴⠶⠞⠛⠉⠁⠀⠀⠀⠀⠀⠀⠀⠉⠛⠶⣤⣌⣙⠳⢦⣤⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣤⣶⡿⠟⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||||
|
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠛⣳⡾⢯⣿⣷⣶⣦⣤⣤⣤⣤⠤⡶⢶⣞⡛⠛⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"""
|
||||||
|
await ctx.reply(file=discord.File(io.StringIO(pasta), filename="yuyuko.txt"))
|
||||||
|
|
||||||
async def setup(bot):
|
async def setup(bot):
|
||||||
await bot.add_cog(Copypasta(bot))
|
await bot.add_cog(Copypasta(bot))
|
||||||
|
|
||||||
|
|||||||
+10
-1
@@ -1,5 +1,4 @@
|
|||||||
import subprocess
|
import subprocess
|
||||||
import discord
|
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
import re
|
import re
|
||||||
import psutil
|
import psutil
|
||||||
@@ -98,5 +97,15 @@ class SysInfo(commands.Cog):
|
|||||||
count = data['response']['player_count']
|
count = data['response']['player_count']
|
||||||
await ctx.reply(f'🎮 Strinova — {count:,} players online right now')
|
await ctx.reply(f'🎮 Strinova — {count:,} players online right now')
|
||||||
|
|
||||||
|
#this is unrelated, strinova player count tracker
|
||||||
|
#i just couldnt be assed with it lol
|
||||||
|
@commands.command()
|
||||||
|
async def strinova(self, ctx):
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.get('https://api.steampowered.com/ISteamUserStats/GetNumberOfCurrentPlayers/v1/?appid=1282270') as r:
|
||||||
|
data = await r.json()
|
||||||
|
count = data['response']['player_count']
|
||||||
|
await ctx.reply(f'🎮 Strinova — {count:,} players online right now')
|
||||||
|
|
||||||
async def setup(bot):
|
async def setup(bot):
|
||||||
await bot.add_cog(SysInfo(bot))
|
await bot.add_cog(SysInfo(bot))
|
||||||
Whitespace-only changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+4
-4
@@ -125,6 +125,7 @@ class Music(commands.Cog):
|
|||||||
vc = await ctx.author.voice.channel.connect(cls=wavelink.Player)
|
vc = await ctx.author.voice.channel.connect(cls=wavelink.Player)
|
||||||
vc.autoplay = wavelink.AutoPlayMode.disabled
|
vc.autoplay = wavelink.AutoPlayMode.disabled
|
||||||
vc.inactive_timeout = None
|
vc.inactive_timeout = None
|
||||||
|
vc.inactive_timeout = None
|
||||||
|
|
||||||
st = self.state(ctx.guild.id)
|
st = self.state(ctx.guild.id)
|
||||||
|
|
||||||
@@ -141,10 +142,9 @@ class Music(commands.Cog):
|
|||||||
for t in tracks:
|
for t in tracks:
|
||||||
t.extras = {"requester": str(ctx.author)}
|
t.extras = {"requester": str(ctx.author)}
|
||||||
st.queue.append(t)
|
st.queue.append(t)
|
||||||
|
if not vc.playing and not vc.paused and st.queue:
|
||||||
if not vc.playing and not vc.paused and st.queue:
|
st.current = st.queue.popleft()
|
||||||
st.current = st.queue.popleft()
|
await vc.play(st.current)
|
||||||
await vc.play(st.current)
|
|
||||||
|
|
||||||
embed = discord.Embed(
|
embed = discord.Embed(
|
||||||
title="📋 Playlist Queued",
|
title="📋 Playlist Queued",
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user