Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,18 @@ DM-based application system with admin review channels.
- `?remindme`
- `/timestamp`

### Admin utilities
- `/say` — Make the bot send a message.
- `/edit` — Edit a bot message sent via `/say` (by message ID; opens a modal).
- `/react` — Add a reaction as the bot (emoji + optional message link; defaults to last message in the channel).

### Moderation
- `?chowkidar` (alias: `?ch`) — Start tracking a user (staff only).
- `?lc` (alias: `?listchowki`) — List currently tracked users (staff only).

### CodeBuddy practice
- `/question <category>` — Sends a practice MCQ; reply with `a`/`b`/`c` in that channel to get ✅/❌ feedback (no points).

### Social
- `?quote`
- `?meme`
Expand Down
2 changes: 1 addition & 1 deletion bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ async def on_ready(self):

# Set presence
await self.change_presence(
activity=discord.Game(name="?helpmenu | Made by YC45")
activity=discord.Game(name="?helpmenu /help | Made by YC45")
)

async def on_command_error(self, ctx: commands.Context, error: commands.CommandError):
Expand Down
53 changes: 52 additions & 1 deletion cogs/chowkidar.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ async def setwlchannel(self, ctx):

await ctx.send(embed=EmbedBuilder.success_embed("Channel Configured", f"Watchlog channel has been set to {ctx.channel.mention}."))

@commands.hybrid_command(name="chowkidar", description="Start tracking a user.")
@commands.hybrid_command(name="chowkidar", description="Start tracking a user.", aliases=["ch"])
@is_staff()
async def chowkidar(self, ctx, user: discord.Member):
if user.id == self.bot.user.id:
Expand All @@ -70,6 +70,57 @@ async def chowkidar(self, ctx, user: discord.Member):

await ctx.send(embed=EmbedBuilder.success_embed("Tracking Initiated", f"Now tracking actions for {user.mention}."))

@commands.command(name="lc", aliases=["listchowki"])
@is_staff()
async def list_chowki(self, ctx: commands.Context):
"""List all users currently tracked by Chowkidar."""
if not ctx.guild:
await ctx.send(
embed=EmbedBuilder.error_embed(
"Server Only",
"This command can only be used in a server.",
)
)
return

if not self.watched_users:
await ctx.send(
embed=EmbedBuilder.error_embed(
"No Tracked Users",
"No one is currently being tracked.",
)
)
return

lines: list[str] = []
for user_id in sorted(self.watched_users):
member = ctx.guild.get_member(user_id)
if member is not None:
display = f"{member}"
else:
user = self.bot.get_user(user_id)
display = f"{user}" if user is not None else "Unknown User"
lines.append(f"- {display} • {user_id}")

# Discord message limit safety. Keep the output concise.
chunks: list[str] = []
current = ""
for line in lines:
if len(current) + len(line) + 1 > 3500:
chunks.append(current)
current = ""
current += ("\n" if current else "") + line
if current:
chunks.append(current)

for i, chunk in enumerate(chunks, 1):
embed = discord.Embed(
title="Chowkidar Tracked Users" if len(chunks) == 1 else f"Chowkidar Tracked Users ({i}/{len(chunks)})",
description=chunk,
color=discord.Color.blurple(),
)
await ctx.send(embed=embed)

@commands.hybrid_command(name="endwl", description="Stop tracking a user.")
@is_staff()
async def endwl(self, ctx, user: discord.Member):
Expand Down
2 changes: 1 addition & 1 deletion cogs/codebuddy_leaderboard.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,7 +301,7 @@ async def codestreak(self, interaction: discord.Interaction):
except Exception:
pass

@commands.command(name="codestreak", aliases=["cs", "cslb"])
@commands.command(name="codestreak", aliases=["csl", "cslb"])
async def codestreak_prefix(self, ctx):
"""Display the streak leaderboard."""
try:
Expand Down
Loading
Loading