mirror of
https://github.com/Paillat-dev/Botator.git
synced 2026-01-02 01:06:19 +00:00
🐛 fix(ChatProcess.py): remove unused imports and variables to improve code readability and maintainability
🐛 fix(ChatProcess.py): fix logic error in the return criteria for determining if the bot should respond to a message 🐛 fix(ChatProcess.py): fix typo in the 'functions' variable name 🐛 fix(ChatProcess.py): fix typo in the 'functions' parameter name in the request function call 🐛 fix(ChatProcess.py): fix typo in the 'functions' parameter name in the processFunctioncallResponse function call 🐛 fix(ChatProcess.py): remove unnecessary print statement in the processMessage function 🐛 fix(prompts.py): remove unnecessary print statement in the createPrompt function 🐛 fix(channelSetup.py): fix logic error in the is_owner function call 🐛 fix(moderation.py): remove unnecessary code for disabling moderation 🐛 fix(config.py): remove unnecessary code for creating tables in the database 🐛 fix(functionscalls.py): fix type hint for the return value of the call_function function 🐛 fix(guild.py): fix handling of serialized data in the load function 🐛 fix(SqlConnector.py): create setup_data table if it does not exist
This commit is contained in:
@@ -10,10 +10,7 @@ from src.utils.variousclasses import models
|
||||
from src.guild import Guild
|
||||
from src.chatUtils.Chat import fetch_messages_history
|
||||
from src.chatUtils.prompts import createPrompt
|
||||
from src.functionscalls import (
|
||||
call_function,
|
||||
server_normal_channel_functions,
|
||||
)
|
||||
from src.functionscalls import call_function, server_normal_channel_functions, functions
|
||||
from src.config import debug
|
||||
from src.chatUtils.requesters.request import request
|
||||
|
||||
@@ -49,7 +46,7 @@ class Chat:
|
||||
|
||||
if (
|
||||
self.original_message != None
|
||||
and self.original_message.author.id == self.bot.user.id
|
||||
and self.original_message.author.id != self.bot.user.id
|
||||
):
|
||||
self.original_message = None
|
||||
|
||||
@@ -67,18 +64,29 @@ class Chat:
|
||||
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.openai_api_key != None)
|
||||
returnCriterias.append(
|
||||
self.message.content.find("<@" + str(self.bot.user.id) + ">") != -1
|
||||
|
||||
serverwideReturnCriterias = []
|
||||
serverwideReturnCriterias.append(self.original_message != None)
|
||||
serverwideReturnCriterias.append(
|
||||
self.message.content.find(f"<@{self.bot.user.id}>") != -1
|
||||
)
|
||||
returnCriterias.append(self.original_message != None)
|
||||
returnCriterias.append(self.is_bots_thread)
|
||||
returnCriterias.append(
|
||||
self.guild.sanitizedChannels.get(str(self.channelIdForSettings), None)
|
||||
!= None
|
||||
serverwideReturnCriterias.append(self.is_bots_thread)
|
||||
|
||||
channelReturnCriterias = []
|
||||
channelReturnCriterias.append(self.channelIdForSettings != "serverwide")
|
||||
channelReturnCriterias.append(
|
||||
self.guild.getChannelInfo(self.channelIdForSettings) != None
|
||||
)
|
||||
return not any(returnCriterias)
|
||||
|
||||
messageReturnCriterias = []
|
||||
messageReturnCriterias.append(
|
||||
any(serverwideReturnCriterias)
|
||||
and self.guild.getChannelInfo("serverwide") != None
|
||||
)
|
||||
messageReturnCriterias.append(all(channelReturnCriterias))
|
||||
|
||||
returnCriterias: bool = not any(messageReturnCriterias)
|
||||
return returnCriterias
|
||||
|
||||
async def getSettings(self):
|
||||
self.settings = self.guild.getChannelInfo(
|
||||
@@ -129,11 +137,14 @@ class Chat:
|
||||
"""
|
||||
This function gets the response from the ai
|
||||
"""
|
||||
funcs = functions
|
||||
if isinstance(self.message.channel, discord.TextChannel):
|
||||
funcs.extend(server_normal_channel_functions)
|
||||
self.response = await request(
|
||||
model=self.model,
|
||||
prompt=self.prompt,
|
||||
openai_api_key=self.openai_api_key,
|
||||
funtcions=server_normal_channel_functions,
|
||||
funtcions=funcs,
|
||||
)
|
||||
|
||||
async def processResponse(self):
|
||||
@@ -142,14 +153,15 @@ class Chat:
|
||||
function_call=self.response,
|
||||
api_key=self.openai_api_key,
|
||||
)
|
||||
if response != None:
|
||||
if response[0] != None:
|
||||
await self.processFunctioncallResponse(response)
|
||||
|
||||
async def processFunctioncallResponse(self, response):
|
||||
self.context.append(
|
||||
{
|
||||
"role": "function",
|
||||
"content": response,
|
||||
"content": response[0],
|
||||
"name": response[1],
|
||||
}
|
||||
)
|
||||
if self.depth < 3:
|
||||
@@ -166,7 +178,6 @@ class Chat:
|
||||
This function processes the message
|
||||
"""
|
||||
if await self.preExitCriteria():
|
||||
print("pre exit criteria")
|
||||
return
|
||||
await self.getSupplementaryData()
|
||||
await self.getSettings()
|
||||
|
||||
@@ -27,7 +27,6 @@ def createPrompt(
|
||||
"""
|
||||
Creates a prompt from the messages list
|
||||
"""
|
||||
print(f"Creating prompt with type {modeltype}")
|
||||
if modeltype == "chat":
|
||||
prompt = createChatPrompt(messages, model, character)
|
||||
sysprompt = prompt[0]["content"]
|
||||
|
||||
@@ -236,7 +236,7 @@ class ChannelSetup(commands.Cog):
|
||||
async def premium(self, ctx: discord.ApplicationContext):
|
||||
guild = Guild(ctx.guild.id)
|
||||
guild.load()
|
||||
if self.bot.is_owner(ctx.author):
|
||||
if await self.bot.is_owner(ctx.author):
|
||||
guild.premium = True
|
||||
# also set expiry date in 6 months isofromat
|
||||
guild.premium_expiration = datetime.datetime.now() + datetime.timedelta(
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import discord
|
||||
import re
|
||||
import os
|
||||
from src.config import debug, curs_data
|
||||
|
||||
|
||||
class ManageChat(discord.Cog):
|
||||
|
||||
@@ -2,7 +2,6 @@ import discord
|
||||
from discord import default_permissions
|
||||
from discord.ext import commands
|
||||
import os
|
||||
from src.config import debug, curs_data, con_data
|
||||
import openai
|
||||
import requests
|
||||
|
||||
@@ -91,13 +90,6 @@ class Moderation(discord.Cog):
|
||||
"Our moderation capabilities have been switched to our new 100% free and open-source AI discord moderation bot! You add it to your server here: https://discord.com/api/oauth2/authorize?client_id=1071451913024974939&permissions=1377342450896&scope=bot and you can find the source code here: https://github.com/Paillat-dev/Moderator/ \n If you need help, you can join our support server here: https://discord.gg/pB6hXtUeDv",
|
||||
ephemeral=True,
|
||||
)
|
||||
if enable == False:
|
||||
curs_data.execute(
|
||||
"DELETE FROM moderation WHERE guild_id = ?", (str(ctx.guild.id),)
|
||||
)
|
||||
con_data.commit()
|
||||
await ctx.respond("Moderation disabled!", ephemeral=True)
|
||||
return
|
||||
|
||||
@discord.slash_command(
|
||||
name="get_toxicity", description="Get the toxicity of a message"
|
||||
|
||||
@@ -45,29 +45,9 @@ def mg_to_guid(mg):
|
||||
return mg.guild.id
|
||||
|
||||
|
||||
con_data = sqlite3.connect("./database/data.db")
|
||||
curs_data = con_data.cursor()
|
||||
con_premium = sqlite3.connect("./database/premium.db")
|
||||
curs_premium = con_premium.cursor()
|
||||
|
||||
curs_data.execute(
|
||||
"""CREATE TABLE IF NOT EXISTS data (guild_id text, channel_id text, api_key text, is_active boolean, max_tokens integer, temperature real, frequency_penalty real, presence_penalty real, uses_count_today integer, prompt_size integer, prompt_prefix text, tts boolean, pretend_to_be text, pretend_enabled boolean)"""
|
||||
)
|
||||
|
||||
con_data.execute(
|
||||
"CREATE TABLE IF NOT EXISTS setup_data (guild_id text, guild_settings text)"
|
||||
)
|
||||
|
||||
# This code creates the model table if it does not exist
|
||||
curs_data.execute(
|
||||
"""CREATE TABLE IF NOT EXISTS model (guild_id text, model_name text)"""
|
||||
)
|
||||
|
||||
# This code creates the images table if it does not exist
|
||||
curs_data.execute(
|
||||
"""CREATE TABLE IF NOT EXISTS images (guild_id text, usage_count integer, is_enabled boolean)"""
|
||||
)
|
||||
|
||||
# This code creates the data table if it does not exist
|
||||
curs_premium.execute(
|
||||
"""CREATE TABLE IF NOT EXISTS data (user_id text, guild_id text, premium boolean)"""
|
||||
|
||||
@@ -341,7 +341,9 @@ async def evaluate_math(
|
||||
return f"Result to math eval of {evaluable}: ```\n{str(result)}```"
|
||||
|
||||
|
||||
async def call_function(message: discord.Message, function_call, api_key):
|
||||
async def call_function(
|
||||
message: discord.Message, function_call, api_key
|
||||
) -> list[None | str]:
|
||||
name = function_call.get("name", "")
|
||||
if name == "":
|
||||
raise FuntionCallError("No name provided")
|
||||
@@ -359,7 +361,7 @@ async def call_function(message: discord.Message, function_call, api_key):
|
||||
):
|
||||
return "Query blocked by the moderation system. If the user asked for something edgy, please tell them in a funny way that you won't do it, but do not specify that it was blocked by the moderation system."
|
||||
returnable = await function(message, arguments)
|
||||
return returnable
|
||||
return [returnable, name]
|
||||
|
||||
|
||||
functions_matching = {
|
||||
|
||||
@@ -25,6 +25,9 @@ class Guild:
|
||||
"SELECT * FROM setup_data WHERE guild_id = ?", (self.id,)
|
||||
)
|
||||
data = curs_data.fetchone()
|
||||
if type(data[1]) == str and data[1].startswith("b'"):
|
||||
data = orjson.loads(data[1][2:-1])
|
||||
else:
|
||||
data = orjson.loads(data[1])
|
||||
self.premium = data["premium"]
|
||||
self.channels = data["channels"]
|
||||
|
||||
@@ -22,3 +22,8 @@ class _sql:
|
||||
|
||||
|
||||
sql: _sql = _sql()
|
||||
|
||||
command = "CREATE TABLE IF NOT EXISTS setup_data (guild_id text, guild_settings text)"
|
||||
|
||||
with sql.mainDb as db:
|
||||
db.execute(command)
|
||||
|
||||
Reference in New Issue
Block a user