mirror of
https://github.com/Paillat-dev/Botator.git
synced 2026-01-02 01:06:19 +00:00
🐛 fix(main.py): handle on_application_command_error with proper error handling and response
✨ feat(main.py): add ChatProcess module for handling chat-related functionality 🔧 refactor(main.py): import necessary modules and update bot.add_cog calls 🔧 refactor(server.ts): change port variable case from lowercase port to uppercase PORT to improve semantics ✨ feat(server.ts): add support for process.env.PORT environment variable to be able to run app on a configurable port 🔧 refactor(cogs/__init__.py): import ChannelSetup cog ✨ feat(cogs/channelSetup.py): add ChannelSetup cog for setting up channels and server-wide settings 🔧 refactor(cogs/setup.py): import SlashCommandGroup and guild_only from discord module ✨ feat(cogs/setup.py): add setup_channel command for adding and removing channels ✨ feat(cogs/setup.py): add api command for setting API keys ✨ feat(cogs/setup.py): add premium command for setting guild to premium 🔧 refactor(cogs/settings.py): temporarily disable images command due to maintenance 🔧 refactor(config.py): remove unnecessary code related to moderation table ✨ feat(guild.py): add Guild class for managing guild-specific data and settings ✨ feat(SqlConnector.py): add SQLConnection and _sql classes for managing SQLite connections ✨ feat(variousclasses.py): add models, characters, and apis classes for autocomplete functionality in slash commands
This commit is contained in:
86
src/ChatProcess.py
Normal file
86
src/ChatProcess.py
Normal file
@@ -0,0 +1,86 @@
|
||||
import asyncio
|
||||
import os
|
||||
import re
|
||||
import discord
|
||||
import datetime
|
||||
import json
|
||||
|
||||
from src.utils.misc import moderate, ModerationError, Hasher
|
||||
from src.utils.variousclasses import models, characters, apis
|
||||
from src.guild import Guild
|
||||
from src.utils.openaicaller import openai_caller
|
||||
from src.functionscalls import (
|
||||
call_function,
|
||||
functions,
|
||||
server_normal_channel_functions,
|
||||
FuntionCallError,
|
||||
)
|
||||
|
||||
|
||||
class Chat:
|
||||
def __init__(self, bot, message: discord.Message):
|
||||
self.bot = bot
|
||||
self.message: discord.Message = message
|
||||
self.guild = Guild(self.message.guild.id)
|
||||
self.author = message.author
|
||||
self.is_bots_thread = False
|
||||
|
||||
async def getSupplementaryData(self) -> None:
|
||||
"""
|
||||
This function gets various contextual data that will be needed later on
|
||||
- The original message (if the message is a reply to a previous message from the bot)
|
||||
- The channel the message was sent in (if the message was sent in a thread)
|
||||
"""
|
||||
if isinstance(self.message.channel, discord.Thread):
|
||||
if self.message.channel.owner_id == self.bot.user.id:
|
||||
self.is_bots_thread = True
|
||||
self.channelIdForSettings = self.message.channel.parent_id
|
||||
else:
|
||||
self.channelIdForSettings = self.message.channel.id
|
||||
|
||||
try:
|
||||
self.original_message = await self.message.channel.fetch_message(
|
||||
self.message.reference.message_id
|
||||
)
|
||||
except:
|
||||
self.original_message = None
|
||||
|
||||
if (
|
||||
self.original_message != None
|
||||
and self.original_message.author.id == self.bot.user.id
|
||||
):
|
||||
self.original_message = None
|
||||
|
||||
async def preExitCriteria(self) -> bool:
|
||||
"""
|
||||
Returns True if any of the exit criterias are met
|
||||
This checks if the guild has the needed settings for the bot to work
|
||||
"""
|
||||
returnCriterias = []
|
||||
returnCriterias.append(self.message.author.id == self.bot.user.id)
|
||||
returnCriterias.append(self.api_key == None)
|
||||
returnCriterias.append(self.is_active == 0)
|
||||
return any(returnCriterias)
|
||||
|
||||
async def postExitCriteria(self) -> bool:
|
||||
"""
|
||||
Returns True if any of the exit criterias are met (their opposite is met but there is a not in front of the any() function)
|
||||
This checks if the bot should actuallly respond to the message or if the message doesn't concern the bot
|
||||
"""
|
||||
returnCriterias = []
|
||||
returnCriterias.append(self.guild.sanitizedChannels.get(str(self.message.channel.id), None) != None)
|
||||
returnCriterias.append(
|
||||
self.message.content.find("<@" + str(self.bot.user.id) + ">") != -1
|
||||
)
|
||||
returnCriterias.append(self.original_message != None)
|
||||
returnCriterias.append(self.is_bots_thread)
|
||||
|
||||
return not any(returnCriterias)
|
||||
|
||||
async def getSettings(self):
|
||||
self.settings = self.guild.getChannelInfo(str(self.channelIdForSettings))
|
||||
self.model = self.settings["model"]
|
||||
self.character = self.settings["character"]
|
||||
self.openai_api_key = self.guild.api_keys.get("openai", None)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user