fix: _get_channel fetches existing channels before creating (prevents duplicates)
This commit is contained in:
18
bot.py
18
bot.py
@@ -199,11 +199,27 @@ class GravityBot(commands.Bot):
|
|||||||
return self.project_channels[project_name]
|
return self.project_channels[project_name]
|
||||||
|
|
||||||
async with self._channel_lock:
|
async with self._channel_lock:
|
||||||
# Double-check
|
# Double-check after lock
|
||||||
if project_name in self.project_channels:
|
if project_name in self.project_channels:
|
||||||
return self.project_channels[project_name]
|
return self.project_channels[project_name]
|
||||||
|
|
||||||
channel_name = self._make_channel_name(project_name)
|
channel_name = self._make_channel_name(project_name)
|
||||||
|
|
||||||
|
# Search existing channels FIRST (prevents duplicates)
|
||||||
|
try:
|
||||||
|
all_channels = await self.guild.fetch_channels()
|
||||||
|
for ch in all_channels:
|
||||||
|
if (isinstance(ch, discord.TextChannel)
|
||||||
|
and ch.name == channel_name
|
||||||
|
and ch.category_id == self.session_category.id):
|
||||||
|
self.project_channels[project_name] = ch
|
||||||
|
self.channel_to_project[ch.id] = project_name
|
||||||
|
logger.info(f"Found existing channel: #{channel_name}")
|
||||||
|
return ch
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(f"fetch_channels failed: {e}")
|
||||||
|
|
||||||
|
# No existing channel — create new
|
||||||
try:
|
try:
|
||||||
ch = await self.guild.create_text_channel(
|
ch = await self.guild.create_text_channel(
|
||||||
name=channel_name,
|
name=channel_name,
|
||||||
|
|||||||
Reference in New Issue
Block a user