Refactor logging implementation to replace print statements with logging calls for better traceability and debugging.

Fixes DM boolean.
This commit is contained in:
Pakobbix 2025-08-17 16:03:09 +02:00
parent c7dd2a88d8
commit 1207ed0ea0

View File

@ -1,8 +1,16 @@
#!/usr/bin/env python3
import yaml
import asyncio
import discord
from discord.ext import commands
import aiohttp
import logging
# ────────────────────────────────────────────────
# Setup logging
# ────────────────────────────────────────────────
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# ────────────────────────────────────────────────
def load_config(path: str):
@ -49,7 +57,9 @@ async def _query_openwebui(user_text: str, channel_id: int, tools_list: list):
# Attach tools if provided in the config file
if tools_list:
payload["tool_ids"] = tools_list
print(f"🔧 Using tools: {payload['tool_ids']}")
logging.debug(f"🔧 Using tools: {payload['tool_ids']}")
logging.debug(f"Request payload to Open-WebUI: {payload}")
# The endpoint path for your instance appears to be /api/chat/completions
async with session.post(f"{OPENWEBUI_URL}/api/chat/completions",
@ -63,6 +73,7 @@ async def _query_openwebui(user_text: str, channel_id: int, tools_list: list):
# If the response is OK, parse the JSON and return the content
response_data = await resp.json()
logging.debug(f"Unparsed response from Open-WebUI: {response_data}")
return response_data['choices'][0]['message']['content']
# --------------------------------------------------------------------------- #
@ -78,12 +89,13 @@ bot = commands.Bot(command_prefix='!', intents=intents) # Command prefix is '!'
@bot.event
async def on_ready():
print(f"✅ Logged in as {bot.user} (id={bot.user.id})")
logging.info(f"✅ Logged in as {bot.user} (id={bot.user.id})")
# Only a test for commands, I add later
@bot.command(name="ping")
async def ping(ctx):
await ctx.send("🏓 Pong!")
return
# --------------------------------------------------------------------------- #
# Main logic only respond to allowed channels / DM flag
@ -92,21 +104,33 @@ async def ping(ctx):
@bot.event
async def on_message(message):
# Ignore messages from bots (incl. the bot itself)
if message.author.bot: return
if message.author.bot:
return
# Allow commands to be processed
# This is crucial: process commands first.
await bot.process_commands(message)
# Skip if we are in a DM and that is disabled
if not ALLOW_DMS and isinstance(message.channel, discord.DMChannel): return
# Now, check if a command was actually invoked. If so, we don't want
# to treat it as a prompt for the AI, so we stop here.
ctx = await bot.get_context(message)
if ctx.valid:
return
# Determine if the message is a DM
is_dm = isinstance(message.channel, discord.DMChannel)
# Skip if it's a DM and DMs are disabled
if is_dm and not ALLOW_DMS:
return
# --- debugging ---
print(f" Message received in channel: {message.channel.id}")
print(f"📢 Whitelisted channels are: {WHITELIST_CHANNELS}")
logging.info(f" Message received in channel: {message.channel.id}")
logging.info(f"📢 Whitelisted channels are: {WHITELIST_CHANNELS}")
# -----------------------------
# Allow only the whitelist channels empty list means “all channels”
if WHITELIST_CHANNELS and message.channel.id not in WHITELIST_CHANNELS:
# Allow only whitelisted channels (if not a DM)
# An empty whitelist means all guild channels are allowed.
if not is_dm and WHITELIST_CHANNELS and message.channel.id not in WHITELIST_CHANNELS:
return
# ----------------------------------------------------------------------- #
@ -139,6 +163,7 @@ async def on_message(message):
if __name__ == "__main__":
try:
asyncio.run(bot.run(DISCORD_TOKEN))
# DO NOT wrap bot.run in asyncio.run()
bot.run(DISCORD_TOKEN)
except KeyboardInterrupt:
print("🤖 Shutting down…")
logging.info("🤖 Shutting down…")