Skip to content

fix: restrict bot to configured channel's threads + future tag-based triggering across repos #7

@coderabbitai

Description

@coderabbitai

Summary

Currently the bot responds to messages in any thread across the entire server, not just threads that belong to the configured channel. This is a bug that needs to be fixed now, with a future enhancement to support tag-based triggering when the bot is deployed across multiple repos/servers.

Identified in: #6 (comment)
Related PR: #6
Requested by: @kpj2006


Bug: Bot responds to ALL threads server-wide

Root Cause

In bot.py, the guard in process_message has a logic flaw:

is_in_thread = isinstance(message.channel, discord.Thread)
is_in_configured_channel = message.channel.id == DISCORD_CHANNEL_ID_INT

if not is_in_thread and not is_in_configured_channel:
    return

When message.channel is a discord.Thread, its .id is the thread's own ID, not the parent channel's ID. The condition not is_in_thread and not is_in_configured_channel lets all threads pass regardless of which channel they belong to, because is_in_thread being True skips the channel ID check entirely.

Fix for Current Codebase

In bot.py, update the process_message function (around lines 169–173):

     is_in_thread = isinstance(message.channel, discord.Thread)
-    is_in_configured_channel = message.channel.id == DISCORD_CHANNEL_ID_INT
+    if is_in_thread:
+        is_in_configured_channel = message.channel.parent_id == DISCORD_CHANNEL_ID_INT
+    else:
+        is_in_configured_channel = message.channel.id == DISCORD_CHANNEL_ID_INT

-    if not is_in_thread and not is_in_configured_channel:
+    if not is_in_configured_channel:
         return

This uses message.channel.parent_id when the channel is a Thread, which correctly identifies the parent text channel.


Future Enhancement: Tag-based Triggering Across Repos

In a later phase, the bot will be deployed across multiple Discord servers/repos and should only respond when explicitly mentioned/tagged (e.g., @SkillBot <question>).

Changes needed when implementing this:

  1. Add mention detection in process_message:

    • Check if client.user is mentioned in message.mentions before processing.
    • Strip the mention prefix from the message content before passing it to Ollama.
  2. Remove or relax the single-channel restriction (DISCORD_CHANNEL_ID_INT check):

    • Once tag-based triggering is in place, the bot can safely listen server-wide (or across guilds) since it only activates on explicit mentions.
  3. Update _get_or_create_thread:

    • Thread naming / parent channel logic may need to be generalized to work across any channel.
  4. Update .env / configuration:

    • DISCORD_CHANNEL_ID can be made optional or replaced with a list of allowed channels/guilds.
  5. Update on_ready backlog processing:

    • Backlog catch-up should also filter by mentions to avoid re-processing unrelated messages.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions