Track per-user message count; `/leaderboard` posts the top 10.
from yourbot_sdk.events import MessageCreate
@plugin.on_event("message_create")
def count(ctx: Context, event: MessageCreate):
if event.get("author_bot"):
return
ctx.kv.increment(f"msgs:{event['author_id']}")
@plugin.on_slash_command("leaderboard")
def show(ctx: Context, event: dict):
counts = ctx.kv.list_values(prefix="msgs:", limit=100) or {} # {key: value}
top = sorted(counts.items(), key=lambda kv: int(kv[1] or 0), reverse=True)[:10]
lines = [f"{i+1}. <@{key.split(':')[1]}>: {n}" for i, (key, n) in enumerate(top)]
ctx.interaction.respond(content="**Top 10 talkers**\n" + "\n".join(lines))
list_values returns at most 100 pairs, so on a server with more than 100 tracked users the true top talker can fall outside the scan. For big servers keep the counts in ctx.sql instead.