Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
3 changes: 3 additions & 0 deletions src/jg/chick/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
)
from jg.chick.lib.threads import (
add_members_with_role,
clear_bot_messages,
ensure_thread_name,
fetch_starting_message,
is_thread_created,
Expand Down Expand Up @@ -221,6 +222,8 @@ async def on_thread_message(
if interest := bot.interests.get(thread.id):
logger.info(f"Noticed message in interest thread {thread.name!r}")
if interests.should_notify(interest, now):
logger.info("Clearing recent bot messages")
await clear_bot_messages(thread)
logger.info(f"Adding role #{interest['role_id']}")
await add_members_with_role(thread, interest["role_id"])
interest["last_notified_at"] = now
Expand Down
36 changes: 33 additions & 3 deletions src/jg/chick/lib/threads.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,39 @@ async def add_members_with_role(thread: discord.Thread, role_id: int) -> None:
raise ValueError(f"Role #{role_id} not found in guild {guild.name!r}")

thread_members_ids = [member.id for member in thread.members]
for member in role.members:
if member.id not in thread_members_ids:
await thread.add_user(member)
mentions = [
f"@{member.id}"
for member in role.members
if member.id not in thread_members_ids
]
if not mentions:
return

mentions_text = " ".join(mentions)
if len(mentions) > 1:
message = (
f"{mentions_text} přidávám vás, protože jste si "
"v <id:customize> vybrali, že vás zajímá tohle téma. "
"Pokud vás to tu přestane bavit, tak si upravte zájmy. "
"Nebo tady spusťte příkaz `/unfollow` a já vás odeberu."
)
else:
message = (
f"{mentions_text} přidávám tě, protože máš "
"v <id:customize> vybráno, že tě zajímá tohle téma. "
"Pokud tě to tu přestane bavit, tak si uprav zájmy. "
"Nebo tady spusť příkaz `/unfollow` a já tě odeberu."
)
await thread.send(message, silent=True)


async def clear_bot_messages(thread: discord.Thread, limit: int = 10) -> None:
"""Clears messages sent by the bot in given thread"""
await thread.purge(
limit=limit,
check=lambda m: m.author == thread.guild.me,
reason="Clearing recent bot messages",
)


async def ping_members_with_role(thread: discord.Thread, role_id: int) -> None:
Expand Down
Loading