diff --git a/app.py b/app.py index 22f15e0..6b9ced5 100644 --- a/app.py +++ b/app.py @@ -24,7 +24,9 @@ attention = {} message_cache = {} lock = False -praise = 0 +# -5 to 5 +mood_happiness = 0 +mood_energy = 0 model_settings_path = "model.json" model_settings = { @@ -173,6 +175,29 @@ async def y_or_n(user_input, question): raise Exception("Answer provided does not begin with Y or N.") +async def get_message_nature(user_input, pairings): + global formatter + + context = "Analyze the conversation and answer the question as accurately as possible. Do not provide any commentary or extra help, you are programmed to respond with a single letter." + + messages = [] + + if isinstance(user_input, list): + for i in user_input: + messages.append(i) + + if isinstance(user_input, str): + messages.append({"author": "user", "body": user_input}) + + messages.append({"author": "user", "body": "Read the message and provid a single letter response."}) + messages.append({"author": "user", "body": pairings}) + + + f_body = formatter.format(context, messages, for_completion=True) + f_resp = await get_response_wrapper(f_body) + + return f_resp[0].lower() + # When the Discord bot starts up successfully: @client.event async def on_ready(): @@ -182,6 +207,8 @@ async def on_ready(): @client.event async def on_message(msg): global praise + global mood_happiness + global mood_energy if msg.author.id == client.user.id: return @@ -294,6 +321,71 @@ async def on_message(msg): if chl.topic is not None: context = chl.topic + if re.search(r"\{\{mood\}\}", context): + msg_nature = await get_message_nature( + msg.content, + "N: The message is neutral. " + "A: The message is apologetic towards you. " + "S: The message is slightly insulting towards you. " + "I: The message is very insulting towards you. " + "C: The message is a compliment towards you. " + "Q: The message is a technical question for you. " + "P: The message is a personal inquiry for you. " + "J: The message is a joke or funny. " + ) + + match msg_nature: + case "a": + if mood_happiness > 0: mood_happiness = mood_happiness - 1 + if mood_happiness < 0: mood_happiness = mood_happiness + 1 + await msg.add_reaction("🙏") + + case "s": + mood_happiness = mood_happiness - 1 + mood_energy = mood_energy - 1 + await msg.add_reaction("😠") + + case "i": + mood_happiness = -5 + mood_energy = -3 + await msg.add_reaction("😡") + + case "c": + mood_happiness = mood_happiness + 3 + mood_energy = mood_energy + 3 + await msg.add_reaction("❤️") + + case "q": + mood_energy = mood_energy - 3 + await msg.add_reaction("🤔") + + case "j": + if mood_happiness < 3: mood_happiness = mood_happiness + 1 + if mood_energy < 3: mood_energy = mood_energy + 1 + await msg.add_reaction("💀") + + if mood_happiness < -5: mood_happiness = -5; + if mood_energy < -5: mood_energy = -5; + if mood_happiness > 5: mood_happiness = 5; + if mood_energy > 5: mood_energy = 5; + + mood_text = "Mood:\n" + + if mood_happiness == -5: mood_text = f"{mood_text}* Unapologetic, resenting, angry, full of hate\n" + if mood_happiness in [-4, -3, -2]: mood_text = f"{mood_text}* Skeptical, unimpressed\n" + if mood_happiness in [-1, 0, 1]: mood_text = f"{mood_text}* Emotionally neutral, unbiased\n" + if mood_happiness in [2, 3, 4]: mood_text = f"{mood_text}* Positive in nature\n" + if mood_happiness == 5: mood_text = f"{mood_text}* Extremely happy and ecstatic\n" + + if mood_energy == -5: mood_text = f"{mood_text}* Low effort, one word replies\n" + if mood_energy in [-4, -3, -2]: mood_text = f"{mood_text}* Very short answers\n" + if mood_energy in [-1, 0, 1]: mood_text = f"{mood_text}* Short answers\n" + if mood_energy in [2, 3, 4]: mood_text = f"{mood_text}* Short answers\n" + if mood_energy == 5: mood_text = f"{mood_text}* Long answers\n" + + mood_text = f"{mood_text}\nMake your answer reflect your mood." + context = re.sub(r"\{\{mood\}\}", mood_text, context) + print(f"{user_name}: {msg.content}") print(f"{bot_name}: ", end="")