Merge pull request '10% kans op nieuwe GPT' (#24) from gpt into master
continuous-integration/drone/push Build is passing

Reviewed-on: #24
This commit was merged in pull request #24.
This commit is contained in:
jp
2023-03-18 23:42:06 +01:00
+30 -7
View File
@@ -2,6 +2,9 @@ import discord
from discord.ext import commands from discord.ext import commands
import numpy as np import numpy as np
import random import random
import requests
import asyncio
import os
from datetime import datetime from datetime import datetime
import re import re
@@ -44,7 +47,7 @@ class Chatbot(commands.Cog):
"hmm?", "hmm?",
"JA WAT?", "JA WAT?",
"Godve...Godver-fucking-domme! Wie de fuck heeft me zojuist gepingt? Wie de fuck heeft de ballen om mij te pingen?! Als ik jou vind hè, ik ram je helemaal de tyfus in. Ik ga je kapot maken. Welke breincel in jouw hoofd dacht dat het grappig was om mij te pingen? Noem jij dat 'grappig'? Ik zal je godverdomme iets laten zien wat grappig is, ja. Ik neuk je moeder zo hard dat ze van me gaat houden, godverdomme. Dat krijg je er van als je me pingt, vuile teringleijer. Jouw soort mag wat mij betreft uitsterven. Weet je, ik ga je helemaal geen aandacht meer geven. Je mag de tering krijgen, en daar blijft het bij. Kutjong.", "Godve...Godver-fucking-domme! Wie de fuck heeft me zojuist gepingt? Wie de fuck heeft de ballen om mij te pingen?! Als ik jou vind hè, ik ram je helemaal de tyfus in. Ik ga je kapot maken. Welke breincel in jouw hoofd dacht dat het grappig was om mij te pingen? Noem jij dat 'grappig'? Ik zal je godverdomme iets laten zien wat grappig is, ja. Ik neuk je moeder zo hard dat ze van me gaat houden, godverdomme. Dat krijg je er van als je me pingt, vuile teringleijer. Jouw soort mag wat mij betreft uitsterven. Weet je, ik ga je helemaal geen aandacht meer geven. Je mag de tering krijgen, en daar blijft het bij. Kutjong.",
self.getResponseForMessage("stroopwafel") self.getResponseForMessageLocal("stroopwafel")
] ]
try: try:
MENTIONED_RESPONSES.append("Wat mot je, " + random.choice(self.bot.get_cog("Shitpost").insult) + "?") MENTIONED_RESPONSES.append("Wat mot je, " + random.choice(self.bot.get_cog("Shitpost").insult) + "?")
@@ -61,15 +64,13 @@ class Chatbot(commands.Cog):
self.pmLast = datetime.now() self.pmLast = datetime.now()
await self.learnFromMessagesInChannel(message.channel, 1) await self.learnFromMessagesInChannel(message.channel, 1)
await self.respondToMessage(message) await self.respondToMessage(message)
elif message.channel.id == self.bot.hdChannels["belangrijk"]: #don't abuse the "belangrijk" channel
pass
else: else:
a = random.randint(0,999) # probablity a = random.randint(0,999) # probablity
if a < 40: if a < 40:
await self.learnFromMessagesInChannel(message.channel, 10) await self.learnFromMessagesInChannel(message.channel, 10)
if "stroop" in message.content.lower(): if "stroop" in message.content.lower():
a = a / 20 # significantly increase the chance of responding if somebody talks about him. a = a / 20 # significantly increase the chance of responding if somebody talks about him.
if message.channel.id == self.bot.hdChannels["shitpost"] and a < 40: #shitpost channel if message.channel.id == os.getenv('STROOP_CHANNEL_SHITPOST') and a < 40: #shitpost channel
await self.respondToMessage(message) await self.respondToMessage(message)
elif a < 10: #all other channels elif a < 10: #all other channels
await self.respondToMessage(message) await self.respondToMessage(message)
@@ -267,7 +268,7 @@ class Chatbot(commands.Cog):
except: except:
pass pass
response = self.getResponseForMessage(wordsToRespondTo) response = await self.getResponseForMessage(wordsToRespondTo)
await ctx.channel.send(response) await ctx.channel.send(response)
# Calculate probabilities and pick a next word from a word pair dict: # Calculate probabilities and pick a next word from a word pair dict:
@@ -283,11 +284,33 @@ class Chatbot(commands.Cog):
async def respondToMessage(self, message): async def respondToMessage(self, message):
wordsToRespondTo = message.content.strip().split() wordsToRespondTo = message.content.strip().split()
response = self.getResponseForMessage(wordsToRespondTo) response = await self.getResponseForMessage(wordsToRespondTo)
await message.channel.send(response) await message.channel.send(response)
#Gets a response #Gets a response
def getResponseForMessage(self, wordsToRespondTo): async def getResponseForMessage(self, wordsToRespondTo):
if random.random() > 0.9:
try:
# GPT request moet echt even in een non-blocking executortje, anders loopt de hele boel vast
return await self.bot.loop.run_in_executor(None,self.getResponseForMessageOnline, wordsToRespondTo)
except:
pass # Door naar local call
return self.getResponseForMessageLocal(wordsToRespondTo)
def translateTo(self, language, text):
req = requests.post('http://gpt.hoekveen.net/translate', json={"text": text, "source_lang": "auto", "target_lang": language})
print(req.json())
return req.json()["translations"][0]["text"]
def getResponseForMessageOnline(self, wordsToRespondTo):
text = self.translateTo("en", " ".join(wordsToRespondTo))
req = requests.post('http://gpt.hoekveen.net/complete', json={"prompt": text, "max_tokens": 60})
print(req.json())
respons = req.json()["text"]
respons = respons[0:respons.rfind(".")+1] # Alles weg na de laatste punt
return self.translateTo("nl", respons)
def getResponseForMessageLocal(self, wordsToRespondTo):
MAX_N_WORDS = 100 #Don't use more words than this MAX_N_WORDS = 100 #Don't use more words than this