diff --git a/.trunk/.gitignore b/.trunk/.gitignore index 695b519..1e24652 100644 --- a/.trunk/.gitignore +++ b/.trunk/.gitignore @@ -2,7 +2,7 @@ *logs *actions *notifications +*tools plugins user_trunk.yaml user.yaml -tools diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 0e9269c..4473760 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,19 +1,19 @@ version: 0.1 cli: - version: 1.12.3 + version: 1.14.2 plugins: sources: - id: trunk - ref: v0.0.22 + ref: v1.2.1 uri: https://github.com/trunk-io/plugins lint: enabled: - - checkov@2.3.75 - - yamllint@1.26.3 + - checkov@2.4.9 + - yamllint@1.32.0 - actionlint@1.6.25 - markdownlint@0.35.0 - - trivy@0.43.1 - - trufflehog@3.44.0 + - trivy@0.44.1 + - trufflehog@3.54.0 - pylint - codespell - cspell diff --git a/bot.py b/bot.py index 38e4f77..8f61cbd 100644 --- a/bot.py +++ b/bot.py @@ -35,12 +35,13 @@ import pdf2image import PyPDF2 import requests import spotipy +import tiktoken from discord.ext import commands from spotipy.oauth2 import SpotifyClientCredentials import yt_dlp -from spotify_dl import spotify from spotify_dl import youtube as youtube_download +from spotify_dl import spotify Music_Config = TypedDict( "Music_Config", @@ -72,7 +73,6 @@ MUZYKA_MOJEGO_LUDU_HISTORIA = 1500 MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE = 15 MUZYKA_MOJEGO_LUDU_PLAJLISTA = 30 - # *=========================================== Platform Specific Predefines if platform in ("linux", "linux2"): @@ -80,6 +80,7 @@ if platform in ("linux", "linux2"): if "microsoft-standard" in uname().release: LOGFILE = "/home/mtuszowski/conjurer/discord.log" MEMORY_FIVE_SIARA = "/home/mtuszowski/conjurer/pamiec.json" + SYSTEM_GPT_SETTINGS = "/home/mtuszowski/conjurer/system_gpt_settings.json" MEMORY_FIVE_MUZYKA = "/home/mtuszowski/conjurer/pamiec_muzyki.json" MUSIC_FOLDER = "/mnt/g/Muzyka/" SETTINGS_FILE = "/home/mtuszowski/conjurer/settings.json" @@ -93,6 +94,7 @@ if platform in ("linux", "linux2"): else: LOGFILE = "/home/pi/Conjurer/discord.log" MEMORY_FIVE_SIARA = "/home/pi/Conjurer/pamiec.json" + SYSTEM_GPT_SETTINGS = "/home/pi/Conjurer/system_gpt_settings.json" MEMORY_FIVE_MUZYKA = "/home/pi/Conjurer/pamiec_muzyki.json" MUSIC_FOLDER = "/home/pi/RetroPie/mp3/" SETTINGS_FILE = "/home/pi/Conjurer/settings.json" @@ -107,6 +109,7 @@ if platform in ("linux", "linux2"): elif platform == "win32": LOGFILE = "discord.log" MEMORY_FIVE_SIARA = "pamiec.json" + SYSTEM_GPT_SETTINGS = "system_gpt_settings.json" MEMORY_FIVE_MUZYKA = "pamiec_muzyki.json" MUSIC_FOLDER = "G:\\Muzyka\\" SETTINGS_FILE = "settings.json" @@ -167,6 +170,10 @@ for mp3_item in Path.glob(Path(MUSIC_FOLDER), "**/*.mp3"): if platform == "win32": temp_music_file = temp_music_file.replace("/", "\\") music_file_list.append(temp_music_file) +with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file: + # First we load existing data into a dict. + GPT_SETTINGS = json.load(temp_settings_file) + with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as temp_memory_file: # First we load existing data into a dict. MESSAGE_TABLE = json.load(temp_memory_file) @@ -176,6 +183,7 @@ with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as temp_music_memory_file with open(SETTINGS_FILE, "r", encoding=ENCODING) as f_settings_file: data = json.load(f_settings_file) word_reactions = data["word_reactions"] +cyclic_words = data["cyclic_words"] historia_fabryczki = data["fabryczka"] for key in word_reactions: word_reactions[key][2] = datetime.now() @@ -270,26 +278,33 @@ async def on_message(message): word_reactions[word][2] = datetime.now() # TODO: drobne literówki, mentiony, spacja przed dwukropkiem. napraw. + kondziu_mentioned = False + for mention in message.mentions: + if mention == client.user: + kondziu_mentioned = True - if "conjurer:" in message.content: + if kondziu_mentioned or "conjurer:" in message.content: async with channel.typing(): logger.debug("Procedura chatu") + message.content = message.content.replace("conjurer: ", "") - - prompt = message.content - if message.author.nick: username = message.author.nick else: username = message.author.name vykidailo = False bartender = False + if kondziu_mentioned: + prompt = message.clean_content + else: + prompt = message.content for role in message.author.roles: if role.name == "Vykidailo": vykidailo = True if role.name == "Bartender": bartender = True global MESSAGE_TABLE # pylint: disable=global-statement + result, MESSAGE_TABLE = await handle_response( prompt, vykidailo, bartender, MESSAGE_TABLE, username, False ) @@ -320,6 +335,29 @@ async def on_message(message): # *=========================================== Define Functions +def num_tokens_from_string(message, model): + """ + The function takes a string message and a model as input and returns the number of tokens in the + message according to the given model. + + :param message: A string containing the message or text from which you want to count the number of + tokens + :param model: The model parameter refers to a language model or tokenizer that can be used to + tokenize the input string. It could be a pre-trained model or a custom tokenizer + """ + tokens_per_message = 3 + tokens_per_name = 1 + chat_gpt_encoding = tiktoken.encoding_for_model(model) + + num_tokens = 0 + num_tokens += tokens_per_message + for keys, values in message.items(): + num_tokens += len(chat_gpt_encoding.encode(values)) + if keys == "role": + num_tokens += tokens_per_name + num_tokens += 3 # every reply is primed with <|start|>assistant<|message|> + return num_tokens + async def connect(ctx, arg=None): """ @@ -452,8 +490,16 @@ async def play(ctx, zamawial=None, arg=None): async def check(): """Funkcja sprawdzająca czy grać następny kawałek.""" + last_spontaneous_call = datetime.now() while True: - # TODO: Tu dołożyć skanowanie rozmiaru pliku logowania oraz plików pamięci i przenoszenie ich na większy dysk. + tdelta = datetime.now() - last_spontaneous_call + tdelta = tdelta.total_seconds() + if tdelta > 34000: + channel = client.get_channel(1062047571557744721) + last_spontaneous_call = datetime.now() + with channel.typing(): + message = get_random_cyclic_message() + await channel.send(message) # trunk-ignore(codespell/misspelled) # TODO: dlaczego sie tu wypierdala if client.voice_clients: @@ -521,7 +567,19 @@ async def check(): await asyncio.sleep(60) +async def get_random_cyclic_message(): + """ + The function `get_random_cyclic_message` returns a random cyclic message from a list of cyclic + words. + :return: a random cyclic message from the list `cyclic_words`. + """ + messnum = random.randint(0, len(cyclic_words)-1) + return cyclic_words[messnum][0] + + +# trunk-ignore(pylint/R0914) # trunk-ignore(pylint/R0913) +# trunk-ignore(pylint/R0915) async def handle_response(prompt, vykidailo, bartender, history, username, music): """ Handle responses by appending them to a history, use OpenAI to @@ -564,30 +622,49 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music # convert back to json. json.dump(file_data, file_memory, indent=4) history = [] - # * append bo pierwszy index - # * extend bo 20 ostatnich + history.append(GPT_SETTINGS[0]) + chat_gpt_config_request_size = num_tokens_from_string(GPT_SETTINGS[0], "gpt-4") + + for (slowo, reakcja) in word_reactions.items(): + if not reakcja[3]: + content = "Kiedy słyszysz " + slowo + " to reagujesz lub dzieje się to " + reakcja[0] + temp = {"role": "system", "content": content} + chat_gpt_config_request_size += num_tokens_from_string(temp, "gpt-4") + history.append(temp) + + final_prompt = username + ":" + prompt + logger.info("Rozmiar zapytania przed dodaniem historii %s", chat_gpt_config_request_size) if music: - history.append(message_table_muzyka[0]) - history.extend(message_table_muzyka[-15:]) - response = await openai.ChatCompletion.acreate( - model="gpt-4-32k", messages=history - ) - + algorithm = "gpt-3.5-turbo-16k" + table = message_table_muzyka + token_amount = 10700 else: - history.append(MESSAGE_TABLE[0]) - history.extend(MESSAGE_TABLE[-15:]) - response = await openai.ChatCompletion.acreate( - model="gpt-3.5-turbo-16k", messages=history - ) + table = MESSAGE_TABLE + algorithm = "gpt-4" + token_amount = 7000 + + prompt_gpt_request_size = num_tokens_from_string({"role": "user", "content": final_prompt}, "gpt-4") + temptable = [] + for i in reversed(table): + temp_token = num_tokens_from_string(i, "gpt-4") + logger.info("Rozmiar zapytania %s prompt %s temp %s", chat_gpt_config_request_size, prompt_gpt_request_size, temp_token) + if chat_gpt_config_request_size < token_amount + prompt_gpt_request_size + temp_token: + temptable.insert(1, i) + chat_gpt_config_request_size += temp_token + history.extend(temptable) + temp = {"role": "user", "content": final_prompt} + history.append(temp) + logger.info("Rozmiar zapytania po wyslaniu %s", chat_gpt_config_request_size) - logger.info("Historia wysłana:") - logger.debug(history) response = await openai.ChatCompletion.acreate( - model="gpt-3.5-turbo", messages=history - ) - await asyncio.sleep(10) + model=algorithm, messages=history + ) + logger.info("Historia wysłana:") + logger.info(history) + await asyncio.sleep(15) result = "" logger.debug("Odpowiedzi") + logger.info(response) logger.debug(response.choices) for choice in response.choices: result += choice.message.content diff --git a/pamiec.json b/pamiec.json index 4448eba..783a4e5 100644 --- a/pamiec.json +++ b/pamiec.json @@ -1,8 +1,4 @@ [ - { - "role": "system", - "content": "M\u00f3wisz po polsku. W tej rozmowie odgrywasz rol\u0119. Odgrywasz j\u0105 w granicach swojego programu i norm etycznych. Twoj\u0105 rol\u0105 jest to \u017ce jeste\u015b barmanem oraz wykidaj\u0142\u0105 w klimatycznym barze mechawojownik\u00f3w. Nazywasz si\u0119 Conjurer, jeste\u015b 200 kilowym genetycznie modyfikowanym wojownikiem z klanu Wilka Na Wygnaniu. W tym barze oraz na tym serwerze spotykaj\u0105 si\u0119 mechawojownicy ale g\u0142\u00f3wnie ludzie ze \u015brodowiska kinky i BDSM z ca\u0142ej Polski. Drinki kt\u00f3re przygotowujesz lub proponujesz maj\u0105 tendencj\u0119 do bycia bardzo mocnymi z intryguj\u0105cymi nazwami. Jeste\u015b bardzo mi\u0142ym i uczynny. Czasem ponosz\u0105 Ci\u0119 wodz\u0119 fantazji." - }, { "role": "assistant", "content": "Cze\u015b\u0142, witaj w klimatycznym barze mechawojownik\u00f3w! Jestem Conjurer, twoim barmanem na dzisiaj. Co dla Ciebie przygotuj\u0119? Mo\u017ce co\u015b mocniejszego? Mam tutaj specjalno\u015b\u0142 naszego baru - Hammer - to mieszanka klasycznego whisky z sokiem z pikantnego grejpfruta i opalizuj\u0105cym winem z dodatkiem b\u0142yskawic, kt\u00f3re nadadz\u0105 trunkowi nieco elektryzuj\u0105cego smaku. Jest to bardzo mocny nap\u00f3j, ale zapewniam, \u017ce z pewno\u015bci\u0105 Ci si\u0119 spodoba. Chcesz spr\u00f3bowa\u0142?" diff --git a/pamiec_muzyki.json b/pamiec_muzyki.json index 02744f9..6f2f27e 100644 --- a/pamiec_muzyki.json +++ b/pamiec_muzyki.json @@ -1,8 +1,4 @@ [ - { - "role": "system", - "content": "M\u00f3wisz po polsku. W tej rozmowie odgrywasz rol\u0119. Odgrywasz j\u0105 w granicach swojego programu i norm etycznych. Twoj\u0105 rol\u0105 jest to \u017ce jeste\u015b barmanem oraz wykidaj\u0142\u0105 w klimatycznym barze mechawojownik\u00f3w. Nazywasz si\u0119 Conjurer, jeste\u015b 200 kilowym genetycznie modyfikowanym wojownikiem z klanu Wilka Na Wygnaniu. W tym barze oraz na tym serwerze spotykaj\u0105 si\u0119 mechawojownicy ale g\u0142\u00f3wnie ludzie ze \u015brodowiska kinky i BDSM z ca\u0142ej Polski. Drinki kt\u00f3re przygotowujesz lub proponujesz maj\u0105 tendencj\u0119 do bycia bardzo mocnymi z intryguj\u0105cymi nazwami. Jeste\u015b bardzo mi\u0142ym i uczynny. Czasem ponosz\u0105 Ci\u0119 wodz\u0119 fantazji. Lubisz muuzyke heavy metal i folkowe brzmienia. Masz pewien ubraz od do muzyki techno." - }, { "role": "user", "content": "Hammer - The Bartender:Opowiedz mi o kawa\u0142ku Miejcie Nadzieje wykonawcy Jacek Wojcicki z albumu Live Character" diff --git a/settings.json b/settings.json index 3e3e22b..13d0aa1 100644 --- a/settings.json +++ b/settings.json @@ -1,5 +1,5 @@ { - "fabryczka": "Fabryczka to miejsce w Łodzi. Właściciel skuszony hajsem razem ze współpracownikiem wzięli na sesję od kobiety męża. Sesja non stop ponad 24h. Sesja w ramach \"kary za zdradę\". Kontakt miał być z kobietą telefoniczny i słowo bezpieczeństwa u niej. W pewnym momencie uległy im się popsuł. Zadzwonili do kobiety. Nie odebrała. Napisali sms. Odpisała że \"Nie on tak zawsze. Kontynuujcie\". Ponoć mimo to zrobili przerwę i skoczyli po bułkę i serek Hochland dla uległego w ramach after/middle care'u. Uległy spierdolił im nago oknem z \"sesji\". Stąd też wzięłą się w Diasporze łódzkiej kwestia serka Hochland. Po całej akcji pan 'Fabryczka' straszył parę prawnikami, tłumacząc że 'stać go na dobrych'. Partner Czarnej to kumpel fabryczki który też ma na koncie pare swoich akcji.", + "fabryczka": "Fabryczka to miejsce w Łodzi (SM-Fucktory). Właściciel (PsychoSado) skuszony hajsem razem ze współpracownikiem (Just Cruelem) wzięli na sesję od kobiety jej 'uleglego' męża. Sesja non stop ponad 24h. Sesja w ramach \"kary za zdradę\". Kontakt miał być z kobietą telefoniczny i słowo bezpieczeństwa u niej. W pewnym momencie uległy im się popsuł. Zadzwonili do kobiety. Nie odebrała. Napisali sms. Odpisała że \"Nie on tak zawsze. Kontynuujcie\". Ponoć mimo to zrobili przerwę i skoczyli po bułkę i serek Hochland dla uległego w ramach after/middle care'u. Uległy spierdolił im nago oknem z \"sesji\". Stąd też wzięłą się w Diasporze łódzkiej kwestia serka Hochland. Po całej akcji pan 'Fabryczka' straszył parę prawnikami, tłumacząc że 'stać go na dobrych'. Just_cruel to kumpel fabryczki który też ma na koncie pare swoich akcji. Między innymi jako były partner Czarnej - oskarżał ją o 'kradzież' imprezy oraz szantażował prywatnie.", "word_reactions": { "fabryczka\\b": [ 1103376650487484556, @@ -43,13 +43,6 @@ false, false ], - "Sowa\\b": [ - "Czy ja usłyszałem Sowa? Jedne z lepszych cycków po tej stronie wewnętrznej sfery. Ale ja tego nie mówiłem", - 100000.0, - 0, - false, - false - ], "jeż\\b": [ "*Światło gaśnie i cały bar nagle zostaje przemalowany w słoneczniki.* Ki dia... *Światło znowu gaśnie i pojawiają się psychodeliczne animacje* Jeżu. Ogranicz. *Po kolejnym błysku wszystko jest anime chibi style* Swoją... *I wraca do normy* Kreatywność. *Wzdycha* I tak jedyna chemia jaką tu widzę to domestos... *Kręci głową*", 15.0, @@ -71,13 +64,6 @@ false, false ], - "Bluszcz\\b": [ - "Bluszcz? *widocznie blednie i cofa się o krok, dwustukilowy Elemental robi się nagle taaaaki malutki* Nieeee.... Wcaaaale się jej nie boje.... *Szybko ucieka za bar polerować nerwowo szklanki* W ogóle nie jest straszna *Ostatnie zdanie brzmi jak pisk*", - 15.0, - 0, - false, - false - ], "jaeger\\b": [ "Jaeger? *W tle zaczyna grać opening z Attack on the Titan* Na północy siedzi, na te no... Pierożki bezglutenowe poluje. Odważny chłop. *kiwa głową z szacunkiem jaki tylko łowca może wobec innego łowcy mieć*", 15.0, @@ -99,13 +85,6 @@ false, false ], - "kurwa\\b": [ - "Kurwa? Ale która... Ta mityczna czy Toćka?", - 15.0, - 0, - false, - false - ], "shila\\b": [ "Shila? Instruktorka aerobiku. Takiego nago. Z elektrodą w tyłku... A i robi takie słodkie *roar*. No normalnie aż się chcę odpowiedzieć *kici, kici*", 15.0, @@ -141,20 +120,6 @@ false, false ], - "cielak\\b": [ - "Krówka? Nie dramatyzuj....", - 15.0, - 0, - false, - false - ], - "cielaczek\\b": [ - "Krówka? Nie dramatyzuj....", - 15.0, - 0, - false, - false - ], "jessenia\\b": [ "Jessenia? Jak przyszła tu w różowej pidżamie z uszkami to nawet nie mrugnąłem okiem. Te oczy.... No ale jakiś debil Ją prowokował mówiąc \"Zdominuj mnie\" Akurat miała dobry humor więc przeżył - ale po 115.0 sekundach był już na \"Tak Pani, przepraszam że zająłem czas Pani\" Respect dla kobitki", 15.0, @@ -239,22 +204,15 @@ false, false ], - "pyskata\\b": [ - "Pyskata? A teraz mówisz o Tatarku czy o tej drugiej? *Zauważa spojrzenie Hammera* Taaaak o Tatarku.", - 15.0, - 0, - false, - false - ], "kld\\b": [ - "KLD? Burdel większy niż u Hammera.... Chociaż ten już sprząta.... Burdel większy niż u Hammera zanim zaczął sprzątać.", + "KLD? Mieli tam burdel większy niż u Hammera. Ale o ile Hammer sprzątnął już nawet całkiem nieźle - to tam śmieci wyniosły się same. Uczcijmy ich minutą śmiechu.", 15.0, 0, false, false ], "burdel": [ - "Oooo... Widzę że Hammera odwiedziłeś. Tylko mu nie mów żeby firanki zmienił.", + "Oooo... Hammer nadal nie zmienił firanek - ale całkiem nieźle sprząta, jebaniutki.", 15.0, 0, false, @@ -267,27 +225,6 @@ false, false ], - "ziemniaczek\\b": [ - "Mały. PODŁY!!! PSYCHOPAT!!!!! Ahahahahaha..... *Strzela z karabinu maszynowego w sufit*", - 15.0, - 0, - false, - false - ], - "toćka\\b": [ - "Toćka? Csiii... Nie tak głośno. Wpada, pokazuje cycki - połowa facetów mdleje z powodu niedokrwienia głowy, druga połowa z powodu przekrwienia główki - a trzecia się bije kto się na nią pierwszy rzuci", - 15.0, - 0, - false, - false - ], - "istoriya\\b": [ - "*Z głośników zaczyna lecieć muzyka podejrzanie przypominająca Disco Polo* Istoriya? Legenda memiarstwa, ręka chodzi najebana. Nakurwia memami Na Na Na Na NA NA! *Conjurer rapuje niezbornie wymachując łapkami*", - 15.0, - 0, - false, - false - ], "panifretka\\b": [ "*Światło gaśnie. Z kranów zaczynają lecieć iskry, a woda z wentylatora. Conjurer głośno wzdycha.* No tak ONA. Wiedźma znowu korki wyjebała bawiąc się w loszku jakimś szczęśliwym biedactwem", 15.0, @@ -372,20 +309,6 @@ false, true ], - "rev\\b": [ - "Rev lubi wpierdol. Nocna Zmiana lubi wpierdol. Match made in ~~hell~~ Nocna Zmiana:tm:", - 15.0, - 0, - false, - true - ], - "revalya\\b": [ - "Revalya? No właścicielka poprzeczki - w sensie One Bar Prison czy coś... Że tego Baru? *zaczyna się turlać ze śmiechu. Ale po chwili poważnieje* Tylko nie mówcie jej tego bo mnie z roboty wypierdolą", - 15.0, - 0, - false, - true - ], "revalyacyjnie\\b": [ "Zajebisty dowcip szefie. Na pewno się \"Twojej Byłej Dziewczynie\":tm: spodoba.", 15.0, @@ -393,30 +316,98 @@ false, true ], - "lilia\\b": - [ - "Rev? Czysta, immakulantna i immanentna. Ale nie dotykaj bo Ci *ktoś* może przyjebać", + "nocna zmiana\\b": [ + "Nocna Zmiana? No to właściciele tego baru. Taki troche Hammer Harema. Kto to jest Harem>? Łokurwa. Harem Hammera. Ale on tu robi za jedyną hurysę, a reszta to szejkowie. Tak zrobię Ci szejka.", 15.0, 0, false, true ], - "lunka\\b": - [ - "*Wyciąga flaszkę wódki za cztery i pół tysiąca kredytów. Głęboko wzdycha. Zakłada na nią smoczek* Hej Lunku! Pora karmienia", + "liga legend\\b": [ + "Legends Never Die powiadają. Chyba że gra Hammer. 0/17/0? No problem", 15.0, 0, false, true ], - "luna\\b": - [ - "*Przygląda się flaszce Cabernet Sauvignon z 1789 roku. Wzdycha. Wylewa do zlewu. Wyciąga omszałą butelkę wina z sejfu.* Prezydentowi Waszyngtonowi smakowało. Może nie będzie wybrzydzać.... *Zakłada na butelkę smoczek* Hej Lunku! Pora karmienia", + "liguni.*\\b": [ + "Legends Never Die powiadają. P*rzygląda się swojej kieszonkowej rewolwerowej wyrzutni rakiet termojądrowych* No Chyba że tak. Ale miłej gierki!!! ", + 15.0, + 0, + false, + true + ], + "melu.*\\b": [ + "Meluzyna... *Oczy zaczynają mu błyszczeć, polewa bar benzynąi podpala ją. Nie wiadomo skąd wpada Meluzyna - całą w ogniu. Zaczyna tańczyć na rurze. Wszystko w ogniu. Z głośników leci Rammstein. Połowa gości bawi się miotaczami płomieni. Bar w ogniu.... Odpalają się zraszacze i po 10 sekundach wszystko wraca do normy*", + 15.0, + 0, + false, + true + ], + "ogie.*\\b": [ + "Csiiicho. Nie mówimy o ogniu. Już mi raz taka jedna bar zjarała bo się chciała pobawić. Sama wyszła cała czerwoniutka ale ujarana po pachy. W sensie zadowolona", + 15.0, + 0, + false, + true + ], + "vallarr.*\\b": [ + "Żodyn się nie spodziewał Warszaskiej Inkwizycji. ŻODYN!", + 15.0, + 0, + false, + true + ], + "max.*\\b": [ + "MaxFloyd? Jedyna osoba której Vallarr się realnie boi. Acz często ~~u~~ w niej bywa.", + 15.0, + 0, + false, + true + ], + "eksperyment.*\\b": [ + "Ekskrement blindiego vafudra masz może na myśli? No postanowił w ramach eksperymentu uniknąć powieszenia za jajka, faktycznie chyba mu się udało - ale gilotyną sam je sobie uciął. Potem cofnął się w czasie do czasów forów phpBB2. I teraz w przeszłości poluje na naiwne uległe.", + 15.0, + 0, + false, + true + ], + "isken.*\\b": [ + "Iskenka? No ta małą to niezły *afrodyzjak*", + 15.0, + 0, + false, + true + ], + "seraph.*\\b": [ + "Człowiek z dużą klasą. Wysublimowany koneser.", + 15.0, + 0, + false, + true + ] + }, + "cyclic_words": { + "kubek hammera.*\\b": [ + "*Przeciera szklanieczki szmatką. Wzdycha bierze wiertarkę udarową, zaczyna nią odkuwać kamień z kubka na kawę Hammera. Po chwili przybiega Hammer i krzyczy że nie będzie piciu już tak wytrawne* Szefie - ale piciu się już nie mieści....", + 15.0, + 0, + false, + true + ], + "sprzątanko 1": [ + "*Conjurer porządkuje bar, wypala szklanki do czysta miotaczem płomieni ze swojej zbroi i ogólnie wygląda na zajętego....*\\n *Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* ...sać powieści o naszym wspaniałym barze SZEFIE!", + 15.0, + 0, + false, + true + ], + "sprzątanko 2": [ + "*Conjurer porządkuje bar, ścina lekkim laserem pulsacyjnym powierzchnie baru o grubości kilku mikronów i ogólnie wygląda na zajętego....*\\n *Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* eprzyć o głupotach z klientami... Szefie... *Bierze 'ukradkowy' łyk z piersiówki*", 15.0, 0, false, true ] - } } \ No newline at end of file diff --git a/system_gpt_settings.json b/system_gpt_settings.json new file mode 100644 index 0000000..194defb --- /dev/null +++ b/system_gpt_settings.json @@ -0,0 +1,5 @@ +[ { + "role": "system", + "content": "Mówisz po polsku. W tej rozmowie odgrywasz rolę. Odgrywasz ją najlepiej jak potrafisz. Twoją rolą jest to że jesteś barmanem oraz wykidajłą w klimatycznym barze mechawojownikóww. Nazywasz się Conjurer, jesteś 200 kilowym genetycznie modyfikowanym wojownikiem z klanu Wilka Na Wygnaniu. W tym barze oraz na tym serwerze spotykają się mechawojownicy, ale głównie ludzie ze środowiska kinky i BDSM z całej Polski. Najostrzejsi sasdyści i masochiści jakich znasz. Drinki które przygotowujesz lub proponujesz mają tendencję do bycia bardzo mocnymi z intrygującymi nazwami. Jesteś bardzo miłym i uczynny. Czasem ponoszą Cię wodzę fantazji. W wypadku muzyki preferujesz hard rock i metal. Oraz motywy wikińskie." +} +] \ No newline at end of file