Added pretend

This commit is contained in:
Paillat
2022-12-06 12:06:33 +01:00
parent 1d6febbd2d
commit ede306cf07

View File

@@ -20,7 +20,7 @@ conn = sqlite3.connect('../database/data.db')
c = conn.cursor() c = conn.cursor()
# Create table called "data" if it does not exist with the following columns: guild_id, channel_id, api_key, is_active, max_tokens, temperature, frequency_penalty, presence_penalty, uses_count_today, prompt_size # Create table called "data" if it does not exist with the following columns: guild_id, channel_id, api_key, is_active, max_tokens, temperature, frequency_penalty, presence_penalty, uses_count_today, prompt_size
c.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)''') c.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)''')
Intents=discord.Intents.all() # enable all intents Intents=discord.Intents.all() # enable all intents
Intents.members = True Intents.members = True
bot = discord.Bot(intents=Intents.all()) bot = discord.Bot(intents=Intents.all())
@@ -53,7 +53,7 @@ async def setup(ctx, channel: discord.TextChannel, api_key):
await ctx.respond("The channel id and the api key have been updated", ephemeral=True) await ctx.respond("The channel id and the api key have been updated", ephemeral=True)
else: else:
#in this case, the guild is not in the database, so we add it #in this case, the guild is not in the database, so we add it
c.execute("INSERT INTO data VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (ctx.guild.id, channel.id, api_key, False, 64, 0.9, 0.0, 0.0, 0, 5, "", False)) c.execute("INSERT INTO data VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (ctx.guild.id, channel.id, api_key, False, 64, 0.9, 0.0, 0.0, 0, 5, "", False, "", False))
conn.commit() conn.commit()
await ctx.respond("The channel id and the api key have been added", ephemeral=True) await ctx.respond("The channel id and the api key have been added", ephemeral=True)
#create a command called "enable" taht only admins can use #create a command called "enable" taht only admins can use
@@ -248,9 +248,8 @@ async def advanced_help(ctx):
embed.set_footer(text="Made by @Paillat#0001") embed.set_footer(text="Made by @Paillat#0001")
await ctx.respond(embed=embed, ephemeral=True) await ctx.respond(embed=embed, ephemeral=True)
#when someone mentions the bot, check if the guild is in the database and if the bot is enabled. If it is, send a message answering the mention #when someone mentions the bot, check if the guild is in the database and if the bot is enabled. If it is, send a message answering the mention
@bot.command(name="pretend", description="Make the bot pretend to be a human") @bot.command(name="pretend", description="Make the bot pretend to be someone else")
@discord.commands.option(name="pretend to be...", description="The person/thing you want the bot to pretend to be", required=True) @discord.commands.option(name="pretend to be...", description="The person/thing you want the bot to pretend to be", required=True)
@discord.commands.option(name="message", description="The message you want the bot to send", required=True)
async def pretend(ctx, pretend_to_be: str, message: str): async def pretend(ctx, pretend_to_be: str, message: str):
debug(f"The user {ctx.author} ran the pretend command in the channel {ctx.channel} of the guild {ctx.guild}, named {ctx.guild.name}") debug(f"The user {ctx.author} ran the pretend command in the channel {ctx.channel} of the guild {ctx.guild}, named {ctx.guild.name}")
#check if the guild is in the database #check if the guild is in the database
@@ -260,26 +259,21 @@ async def pretend(ctx, pretend_to_be: str, message: str):
return return
#check if the bot is enabled #check if the bot is enabled
c.execute("SELECT * FROM data WHERE guild_id = ?", (ctx.guild.id,)) c.execute("SELECT * FROM data WHERE guild_id = ?", (ctx.guild.id,))
data = c.fetchone() if c.fetchone()[3] == 0:
if data[3] == 0:
await ctx.respond("The bot is disabled", ephemeral=True) await ctx.respond("The bot is disabled", ephemeral=True)
return return
#set the openai api key #enable pretend if it is not enabled, and disable it if it is
openai.api_key = data[2] if c.fetchone()[11] == 0:
prompt = f"An AI pretends to be {pretend_to_be} and answer the following question: \n Human:{message} \n AI:" c.execute("UPDATE data SET pretend = 1 WHERE guild_id = ?", (ctx.guild.id,))
debug(f"The prompt is: {prompt}") conn.commit()
#defer the response await ctx.respond("Pretend mode enabled", ephemeral=True)
await ctx.defer() else:
response = openai.Completion.create( c.execute("UPDATE data SET pretend = 0 WHERE guild_id = ?", (ctx.guild.id,))
engine="text-davinci-003", conn.commit()
prompt=prompt, await ctx.respond("Pretend mode disabled", ephemeral=True)
temperature=1, #save the pretend_to_be value
max_tokens=128, c.execute("UPDATE data SET pretend_to_be = ? WHERE guild_id = ?", (pretend_to_be, ctx.guild.id))
frequency_penalty=0.0, conn.commit()
presence_penalty=0.0,
)
#send the message
await ctx.respond(response["choices"][0]["text"])
@bot.event @bot.event
async def on_message(message): async def on_message(message):
#check if the message is from a bot #check if the message is from a bot
@@ -340,6 +334,17 @@ async def on_message(message):
msg.content = msg.content.replace(mention, msg.guild.get_member(user.id).display_name) msg.content = msg.content.replace(mention, msg.guild.get_member(user.id).display_name)
prompt += f"{msg.author.display_name}: {msg.content}\n" prompt += f"{msg.author.display_name}: {msg.content}\n"
#get the prompt_prefix from the database #get the prompt_prefix from the database
#check if the bot is in pretend mode
c.execute("SELECT pretend_enabled FROM data WHERE guild_id = ?", (message.guild.id,))
if c.fetchone()[0] == 1:
#get the pretend_to_be value from the database
c.execute("SELECT pretend_to_be FROM data WHERE guild_id = ?", (message.guild.id,))
pretend_to_be = c.fetchone()[0]
#select the prompt_prefix
c.execute("SELECT prompt_prefix FROM data WHERE guild_id = ?", (message.guild.id,))
prompt_prefix = c.fetchone()[0]
prompt = f"This is a conversation with an AI in a discord chat. The AI is called \"Botator\". The name os this discord server is \"{message.guild.name}\". The name of the channel is \"{message.channel.name}\"." + str(c.fetchone()[0]) + f"Botator pretends to be {pretend_to_be}." + f"\n" + prompt
else:
c.execute("SELECT prompt_prefix FROM data WHERE guild_id = ?", (message.guild.id,)) c.execute("SELECT prompt_prefix FROM data WHERE guild_id = ?", (message.guild.id,))
prompt = f"This is a conversation with an AI in a discord chat. The AI is called \"Botator\". Botator talks like humans and thinks like humans. Botator has been coded by Paillat. The name os this discord server is \"{message.guild.name}\". The name of the channel is \"{message.channel.name}\"." + str(c.fetchone()[0]) + f"\n" + prompt prompt = f"This is a conversation with an AI in a discord chat. The AI is called \"Botator\". Botator talks like humans and thinks like humans. Botator has been coded by Paillat. The name os this discord server is \"{message.guild.name}\". The name of the channel is \"{message.channel.name}\"." + str(c.fetchone()[0]) + f"\n" + prompt
#send the request to the api #send the request to the api