mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-15 14:22:13 +00:00
Compare commits
22 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 67ab3b4bba | |||
| 71623d9812 | |||
| ce54233908 | |||
| b0df66c5da | |||
| fda2733600 | |||
| 027050a4dd | |||
| b22b9add15 | |||
| 1fd5b8cfac | |||
| 5e3d90c038 | |||
| fef53a3587 | |||
| be1e338e54 | |||
| d6dd276a92 | |||
| a0cddaa1f0 | |||
| 38355da861 | |||
| 03c73fc55e | |||
| 77089d408b | |||
| f05ae2b006 | |||
| bca63dd94a | |||
| 2641965792 | |||
| dc9946533e | |||
| 0a39eba723 | |||
| 114cfc35bc |
@@ -0,0 +1,39 @@
|
|||||||
|
# This workflow will install Python dependencies, run tests and lint with a single version of Python
|
||||||
|
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
||||||
|
|
||||||
|
name: Python application
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python 3.10
|
||||||
|
uses: actions/setup-python@v3
|
||||||
|
with:
|
||||||
|
python-version: "3.10"
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install flake8 pytest
|
||||||
|
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||||
|
- name: Lint with flake8
|
||||||
|
run: |
|
||||||
|
# stop the build if there are Python syntax errors or undefined names
|
||||||
|
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||||
|
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
|
||||||
|
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||||
|
- name: Test with pytest
|
||||||
|
run: |
|
||||||
|
pytest
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
|
||||||
|
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
|
||||||
|
|
||||||
|
name: Python package
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ "main" ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ "main" ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
python-version: ["3.8", "3.9", "3.10"]
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
uses: actions/setup-python@v3
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python-version }}
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
python -m pip install flake8 pytest
|
||||||
|
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
|
||||||
|
- name: Lint with flake8
|
||||||
|
run: |
|
||||||
|
# stop the build if there are Python syntax errors or undefined names
|
||||||
|
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
|
||||||
|
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
|
||||||
|
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
|
||||||
|
- name: Test with pytest
|
||||||
|
run: |
|
||||||
|
pytest
|
||||||
+39
@@ -158,3 +158,42 @@ cython_debug/
|
|||||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
#.idea/
|
#.idea/
|
||||||
|
package-lock.json
|
||||||
|
package.json
|
||||||
|
.vscode/settings.json
|
||||||
|
node_modules/.package-lock.json
|
||||||
|
node_modules/.bin/prettier
|
||||||
|
node_modules/prettier/bin-prettier.js
|
||||||
|
node_modules/prettier/cli.js
|
||||||
|
node_modules/prettier/doc.js
|
||||||
|
node_modules/prettier/index.js
|
||||||
|
node_modules/prettier/LICENSE
|
||||||
|
node_modules/prettier/package.json
|
||||||
|
node_modules/prettier/parser-angular.js
|
||||||
|
node_modules/prettier/parser-babel.js
|
||||||
|
node_modules/prettier/parser-espree.js
|
||||||
|
node_modules/prettier/parser-flow.js
|
||||||
|
node_modules/prettier/parser-glimmer.js
|
||||||
|
node_modules/prettier/parser-graphql.js
|
||||||
|
node_modules/prettier/parser-html.js
|
||||||
|
node_modules/prettier/parser-markdown.js
|
||||||
|
node_modules/prettier/parser-meriyah.js
|
||||||
|
node_modules/prettier/parser-postcss.js
|
||||||
|
node_modules/prettier/parser-typescript.js
|
||||||
|
node_modules/prettier/parser-yaml.js
|
||||||
|
node_modules/prettier/README.md
|
||||||
|
node_modules/prettier/standalone.js
|
||||||
|
node_modules/prettier/third-party.js
|
||||||
|
node_modules/prettier/esm/parser-angular.mjs
|
||||||
|
node_modules/prettier/esm/parser-babel.mjs
|
||||||
|
node_modules/prettier/esm/parser-espree.mjs
|
||||||
|
node_modules/prettier/esm/parser-flow.mjs
|
||||||
|
node_modules/prettier/esm/parser-glimmer.mjs
|
||||||
|
node_modules/prettier/esm/parser-graphql.mjs
|
||||||
|
node_modules/prettier/esm/parser-html.mjs
|
||||||
|
node_modules/prettier/esm/parser-markdown.mjs
|
||||||
|
node_modules/prettier/esm/parser-meriyah.mjs
|
||||||
|
node_modules/prettier/esm/parser-postcss.mjs
|
||||||
|
node_modules/prettier/esm/parser-typescript.mjs
|
||||||
|
node_modules/prettier/esm/parser-yaml.mjs
|
||||||
|
node_modules/prettier/esm/standalone.mjs
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
*out
|
||||||
|
*logs
|
||||||
|
*actions
|
||||||
|
*notifications
|
||||||
|
*tools
|
||||||
|
plugins
|
||||||
|
user_trunk.yaml
|
||||||
|
user.yaml
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Autoformatter friendly markdownlint config (all formatting rules disabled)
|
||||||
|
default: true
|
||||||
|
blank_lines: false
|
||||||
|
bullet: false
|
||||||
|
html: false
|
||||||
|
indentation: false
|
||||||
|
line_length: false
|
||||||
|
spaces: false
|
||||||
|
url: false
|
||||||
|
whitespace: false
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
rules:
|
||||||
|
quoted-strings:
|
||||||
|
required: only-when-needed
|
||||||
|
extra-allowed: ["{|}"]
|
||||||
|
empty-values:
|
||||||
|
forbid-in-block-mappings: true
|
||||||
|
forbid-in-flow-mappings: true
|
||||||
|
key-duplicates: {}
|
||||||
|
octal-values:
|
||||||
|
forbid-implicit-octal: true
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
version: 0.1
|
||||||
|
cli:
|
||||||
|
version: 1.14.2
|
||||||
|
plugins:
|
||||||
|
sources:
|
||||||
|
- id: trunk
|
||||||
|
ref: v1.2.1
|
||||||
|
uri: https://github.com/trunk-io/plugins
|
||||||
|
lint:
|
||||||
|
enabled:
|
||||||
|
- checkov@2.4.9
|
||||||
|
- yamllint@1.32.0
|
||||||
|
- actionlint@1.6.25
|
||||||
|
- markdownlint@0.35.0
|
||||||
|
- trivy@0.44.1
|
||||||
|
- trufflehog@3.54.0
|
||||||
|
- pylint
|
||||||
|
- codespell
|
||||||
|
- cspell
|
||||||
|
- git-diff-check
|
||||||
|
- eslint
|
||||||
|
- prettier
|
||||||
|
- semgrep
|
||||||
|
- autopep8
|
||||||
|
- bandit
|
||||||
|
- black
|
||||||
|
- flake8
|
||||||
|
- isort
|
||||||
|
- mypy
|
||||||
|
- pylint
|
||||||
|
- ruff
|
||||||
|
- semgrep
|
||||||
|
- yapf
|
||||||
|
- gitleaks
|
||||||
|
|
||||||
|
runtimes:
|
||||||
|
enabled:
|
||||||
|
- go@1.19.5
|
||||||
|
- node@18.12.1
|
||||||
|
- python@3.10.8
|
||||||
|
actions:
|
||||||
|
disabled:
|
||||||
|
- trunk-announce
|
||||||
|
- trunk-check-pre-push
|
||||||
|
- trunk-fmt-pre-commit
|
||||||
|
enabled:
|
||||||
|
- trunk-upgrade-available
|
||||||
Vendored
+6
-1
@@ -1,4 +1,9 @@
|
|||||||
{
|
{
|
||||||
"python.linting.enabled": true,
|
"python.linting.enabled": true,
|
||||||
"python.linting.pylintEnabled": true
|
"python.linting.pylintEnabled": true,
|
||||||
|
"trunk.inlineDecorators": true,
|
||||||
|
"trunk.inlineDecoratorsForAllExtensions": true,
|
||||||
|
"trunk.showPreexistingIssues": true,
|
||||||
|
"trunk.autoInit": true,
|
||||||
|
"trunk.showBelowThresholdIssues": true
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ from logging import handlers
|
|||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
from platform import uname
|
from platform import uname
|
||||||
from sys import platform
|
from sys import platform
|
||||||
from typing import List, TypedDict, Optional
|
from typing import List, Optional, TypedDict
|
||||||
|
|
||||||
# *==============Imported libraries
|
# *==============Imported libraries
|
||||||
import discord
|
import discord
|
||||||
@@ -35,12 +35,13 @@ import pdf2image
|
|||||||
import PyPDF2
|
import PyPDF2
|
||||||
import requests
|
import requests
|
||||||
import spotipy
|
import spotipy
|
||||||
|
import tiktoken
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
from spotipy.oauth2 import SpotifyClientCredentials
|
from spotipy.oauth2 import SpotifyClientCredentials
|
||||||
|
|
||||||
import yt_dlp
|
import yt_dlp
|
||||||
from spotify_dl import spotify
|
|
||||||
from spotify_dl import youtube as youtube_download
|
from spotify_dl import youtube as youtube_download
|
||||||
|
from spotify_dl import spotify
|
||||||
|
|
||||||
Music_Config = TypedDict(
|
Music_Config = TypedDict(
|
||||||
"Music_Config",
|
"Music_Config",
|
||||||
@@ -53,10 +54,12 @@ Music_Config = TypedDict(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# *=========================================== Predefines
|
# *=========================================== Predefines
|
||||||
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
formatter = logging.Formatter(
|
||||||
|
"%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
MASTER_TIMEOUT = datetime.now()
|
MASTER_TIMEOUT = datetime.now()
|
||||||
INITIAL_TIME_WAIT = 5
|
INITIAL_TIME_WAIT = 5
|
||||||
MUZYKA: Music_Config = {"playing": False, "ctx": None, "queue": [], "requestor": []}
|
MUZYKA: Music_Config = {"playing": False,
|
||||||
|
"ctx": None, "queue": [], "requestor": []}
|
||||||
|
|
||||||
LOGFILE = ""
|
LOGFILE = ""
|
||||||
NETRC_FILE = ""
|
NETRC_FILE = ""
|
||||||
@@ -66,6 +69,10 @@ MEMORY_FIVE_MUZYKA = ""
|
|||||||
SETTINGS_FILE = ""
|
SETTINGS_FILE = ""
|
||||||
ENCODING = ""
|
ENCODING = ""
|
||||||
GRAPHICS_PATH = ""
|
GRAPHICS_PATH = ""
|
||||||
|
MUZYKA_MOJEGO_LUDU_HISTORIA = 1500
|
||||||
|
MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE = 15
|
||||||
|
MUZYKA_MOJEGO_LUDU_PLAJLISTA = 30
|
||||||
|
|
||||||
# *=========================================== Platform Specific Predefines
|
# *=========================================== Platform Specific Predefines
|
||||||
|
|
||||||
if platform in ("linux", "linux2"):
|
if platform in ("linux", "linux2"):
|
||||||
@@ -73,6 +80,7 @@ if platform in ("linux", "linux2"):
|
|||||||
if "microsoft-standard" in uname().release:
|
if "microsoft-standard" in uname().release:
|
||||||
LOGFILE = "/home/mtuszowski/conjurer/discord.log"
|
LOGFILE = "/home/mtuszowski/conjurer/discord.log"
|
||||||
MEMORY_FIVE_SIARA = "/home/mtuszowski/conjurer/pamiec.json"
|
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"
|
MEMORY_FIVE_MUZYKA = "/home/mtuszowski/conjurer/pamiec_muzyki.json"
|
||||||
MUSIC_FOLDER = "/mnt/g/Muzyka/"
|
MUSIC_FOLDER = "/mnt/g/Muzyka/"
|
||||||
SETTINGS_FILE = "/home/mtuszowski/conjurer/settings.json"
|
SETTINGS_FILE = "/home/mtuszowski/conjurer/settings.json"
|
||||||
@@ -86,6 +94,7 @@ if platform in ("linux", "linux2"):
|
|||||||
else:
|
else:
|
||||||
LOGFILE = "/home/pi/Conjurer/discord.log"
|
LOGFILE = "/home/pi/Conjurer/discord.log"
|
||||||
MEMORY_FIVE_SIARA = "/home/pi/Conjurer/pamiec.json"
|
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"
|
MEMORY_FIVE_MUZYKA = "/home/pi/Conjurer/pamiec_muzyki.json"
|
||||||
MUSIC_FOLDER = "/home/pi/RetroPie/mp3/"
|
MUSIC_FOLDER = "/home/pi/RetroPie/mp3/"
|
||||||
SETTINGS_FILE = "/home/pi/Conjurer/settings.json"
|
SETTINGS_FILE = "/home/pi/Conjurer/settings.json"
|
||||||
@@ -100,6 +109,7 @@ if platform in ("linux", "linux2"):
|
|||||||
elif platform == "win32":
|
elif platform == "win32":
|
||||||
LOGFILE = "discord.log"
|
LOGFILE = "discord.log"
|
||||||
MEMORY_FIVE_SIARA = "pamiec.json"
|
MEMORY_FIVE_SIARA = "pamiec.json"
|
||||||
|
SYSTEM_GPT_SETTINGS = "system_gpt_settings.json"
|
||||||
MEMORY_FIVE_MUZYKA = "pamiec_muzyki.json"
|
MEMORY_FIVE_MUZYKA = "pamiec_muzyki.json"
|
||||||
MUSIC_FOLDER = "G:\\Muzyka\\"
|
MUSIC_FOLDER = "G:\\Muzyka\\"
|
||||||
SETTINGS_FILE = "settings.json"
|
SETTINGS_FILE = "settings.json"
|
||||||
@@ -160,6 +170,10 @@ for mp3_item in Path.glob(Path(MUSIC_FOLDER), "**/*.mp3"):
|
|||||||
if platform == "win32":
|
if platform == "win32":
|
||||||
temp_music_file = temp_music_file.replace("/", "\\")
|
temp_music_file = temp_music_file.replace("/", "\\")
|
||||||
music_file_list.append(temp_music_file)
|
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:
|
with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as temp_memory_file:
|
||||||
# First we load existing data into a dict.
|
# First we load existing data into a dict.
|
||||||
MESSAGE_TABLE = json.load(temp_memory_file)
|
MESSAGE_TABLE = json.load(temp_memory_file)
|
||||||
@@ -169,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:
|
with open(SETTINGS_FILE, "r", encoding=ENCODING) as f_settings_file:
|
||||||
data = json.load(f_settings_file)
|
data = json.load(f_settings_file)
|
||||||
word_reactions = data["word_reactions"]
|
word_reactions = data["word_reactions"]
|
||||||
|
cyclic_words = data["cyclic_words"]
|
||||||
historia_fabryczki = data["fabryczka"]
|
historia_fabryczki = data["fabryczka"]
|
||||||
for key in word_reactions:
|
for key in word_reactions:
|
||||||
word_reactions[key][2] = datetime.now()
|
word_reactions[key][2] = datetime.now()
|
||||||
@@ -185,7 +200,6 @@ async def on_ready():
|
|||||||
logger.debug("%s has connected to Discord!", client.user)
|
logger.debug("%s has connected to Discord!", client.user)
|
||||||
await client.change_presence(activity=discord.Game(name="Axe Throwing Darts"))
|
await client.change_presence(activity=discord.Game(name="Axe Throwing Darts"))
|
||||||
await client.tree.sync()
|
await client.tree.sync()
|
||||||
# await tree.sync(guild=discord.Object(id=Your guild id))
|
|
||||||
await check()
|
await check()
|
||||||
|
|
||||||
|
|
||||||
@@ -264,26 +278,33 @@ async def on_message(message):
|
|||||||
word_reactions[word][2] = datetime.now()
|
word_reactions[word][2] = datetime.now()
|
||||||
|
|
||||||
# TODO: drobne literówki, mentiony, spacja przed dwukropkiem. napraw.
|
# 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():
|
async with channel.typing():
|
||||||
logger.debug("Procedura chatu")
|
logger.debug("Procedura chatu")
|
||||||
|
|
||||||
message.content = message.content.replace("conjurer: ", "")
|
message.content = message.content.replace("conjurer: ", "")
|
||||||
|
|
||||||
prompt = message.content
|
|
||||||
|
|
||||||
if message.author.nick:
|
if message.author.nick:
|
||||||
username = message.author.nick
|
username = message.author.nick
|
||||||
else:
|
else:
|
||||||
username = message.author.name
|
username = message.author.name
|
||||||
vykidailo = False
|
vykidailo = False
|
||||||
bartender = False
|
bartender = False
|
||||||
|
if kondziu_mentioned:
|
||||||
|
prompt = message.clean_content
|
||||||
|
else:
|
||||||
|
prompt = message.content
|
||||||
for role in message.author.roles:
|
for role in message.author.roles:
|
||||||
if role.name == "Vykidailo":
|
if role.name == "Vykidailo":
|
||||||
vykidailo = True
|
vykidailo = True
|
||||||
if role.name == "Bartender":
|
if role.name == "Bartender":
|
||||||
bartender = True
|
bartender = True
|
||||||
global MESSAGE_TABLE # pylint: disable=global-statement
|
global MESSAGE_TABLE # pylint: disable=global-statement
|
||||||
|
|
||||||
result, MESSAGE_TABLE = await handle_response(
|
result, MESSAGE_TABLE = await handle_response(
|
||||||
prompt, vykidailo, bartender, MESSAGE_TABLE, username, False
|
prompt, vykidailo, bartender, MESSAGE_TABLE, username, False
|
||||||
)
|
)
|
||||||
@@ -314,6 +335,29 @@ async def on_message(message):
|
|||||||
|
|
||||||
# *=========================================== Define Functions
|
# *=========================================== 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):
|
async def connect(ctx, arg=None):
|
||||||
"""
|
"""
|
||||||
@@ -363,7 +407,6 @@ async def disconnect(ctx):
|
|||||||
|
|
||||||
|
|
||||||
# trunk-ignore(pylint/R0915)
|
# trunk-ignore(pylint/R0915)
|
||||||
# trunk-ignore(pylint/R0914)
|
|
||||||
# trunk-ignore(pylint/R0912)
|
# trunk-ignore(pylint/R0912)
|
||||||
async def play(ctx, zamawial=None, arg=None):
|
async def play(ctx, zamawial=None, arg=None):
|
||||||
"""
|
"""
|
||||||
@@ -447,9 +490,16 @@ async def play(ctx, zamawial=None, arg=None):
|
|||||||
|
|
||||||
async def check():
|
async def check():
|
||||||
"""Funkcja sprawdzająca czy grać następny kawałek."""
|
"""Funkcja sprawdzająca czy grać następny kawałek."""
|
||||||
|
last_spontaneous_call = datetime.now()
|
||||||
while True:
|
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
|
||||||
# TODO: Dodać typing i dać znać że wykonuje operacje porządkowania Baru (zamiata, układa szklanki itp.)
|
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)
|
# trunk-ignore(codespell/misspelled)
|
||||||
# TODO: dlaczego sie tu wypierdala
|
# TODO: dlaczego sie tu wypierdala
|
||||||
if client.voice_clients:
|
if client.voice_clients:
|
||||||
@@ -517,7 +567,19 @@ async def check():
|
|||||||
await asyncio.sleep(60)
|
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/R0913)
|
||||||
|
# trunk-ignore(pylint/R0915)
|
||||||
async def handle_response(prompt, vykidailo, bartender, history, username, music):
|
async def handle_response(prompt, vykidailo, bartender, history, username, music):
|
||||||
"""
|
"""
|
||||||
Handle responses by appending them to a history, use OpenAI to
|
Handle responses by appending them to a history, use OpenAI to
|
||||||
@@ -560,22 +622,49 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music
|
|||||||
# convert back to json.
|
# convert back to json.
|
||||||
json.dump(file_data, file_memory, indent=4)
|
json.dump(file_data, file_memory, indent=4)
|
||||||
history = []
|
history = []
|
||||||
# * append bo pierwszy index
|
history.append(GPT_SETTINGS[0])
|
||||||
# * extend bo 20 ostatnich
|
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:
|
if music:
|
||||||
history.append(message_table_muzyka[0])
|
algorithm = "gpt-3.5-turbo-16k"
|
||||||
history.extend(message_table_muzyka[-20:])
|
table = message_table_muzyka
|
||||||
|
token_amount = 10700
|
||||||
else:
|
else:
|
||||||
history.append(MESSAGE_TABLE[0])
|
table = MESSAGE_TABLE
|
||||||
history.extend(MESSAGE_TABLE[-20:])
|
algorithm = "gpt-4"
|
||||||
logger.info("Historia wysłana:")
|
token_amount = 7000
|
||||||
logger.debug(history)
|
|
||||||
|
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)
|
||||||
|
|
||||||
response = await openai.ChatCompletion.acreate(
|
response = await openai.ChatCompletion.acreate(
|
||||||
model="gpt-3.5-turbo", messages=history
|
model=algorithm, messages=history
|
||||||
)
|
)
|
||||||
await asyncio.sleep(10)
|
logger.info("Historia wysłana:")
|
||||||
|
logger.info(history)
|
||||||
|
await asyncio.sleep(15)
|
||||||
result = ""
|
result = ""
|
||||||
logger.debug("Odpowiedzi")
|
logger.debug("Odpowiedzi")
|
||||||
|
logger.info(response)
|
||||||
logger.debug(response.choices)
|
logger.debug(response.choices)
|
||||||
for choice in response.choices:
|
for choice in response.choices:
|
||||||
result += choice.message.content
|
result += choice.message.content
|
||||||
@@ -631,7 +720,8 @@ async def get_file(ctx, source, link):
|
|||||||
item_type, item_id = spotify.parse_spotify_url(link)
|
item_type, item_id = spotify.parse_spotify_url(link)
|
||||||
if item_id:
|
if item_id:
|
||||||
file_list = spotify.fetch_tracks(spotify_ctrl, item_type, link)
|
file_list = spotify.fetch_tracks(spotify_ctrl, item_type, link)
|
||||||
directory_name = spotify.get_item_name(spotify_ctrl, item_type, item_id)
|
directory_name = spotify.get_item_name(
|
||||||
|
spotify_ctrl, item_type, item_id)
|
||||||
url_data = {"urls": []}
|
url_data = {"urls": []}
|
||||||
url_dict = {}
|
url_dict = {}
|
||||||
url_dict["save_path"] = Path(
|
url_dict["save_path"] = Path(
|
||||||
@@ -755,10 +845,42 @@ async def async_iterator_generator(range_of_iterable):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
async def get_stats(ctx, history_limit):
|
||||||
|
"""
|
||||||
|
The `get_stats` function retrieves the message history of a specific channel and counts the
|
||||||
|
frequency of each word in the messages.
|
||||||
|
|
||||||
|
:param ctx: The `ctx` parameter is an object that represents the context of the command being
|
||||||
|
executed. It contains information such as the message, the author, the server, and other relevant
|
||||||
|
details
|
||||||
|
:param history_limit: The `history_limit` parameter is the maximum number of messages to retrieve
|
||||||
|
from the channel history. It determines how far back in time the statistics will be calculated
|
||||||
|
:return: The function `get_stats` returns a dictionary `stats` that contains the frequency count of
|
||||||
|
words found in the messages from the specified channel.
|
||||||
|
"""
|
||||||
|
channel_id = 1062047367337095268
|
||||||
|
async with ctx.typing():
|
||||||
|
stats = {}
|
||||||
|
channel = client.get_channel(channel_id)
|
||||||
|
messages = [message async for message in channel.history(limit=history_limit)]
|
||||||
|
# traverse the iterable of awaitables
|
||||||
|
for message in messages:
|
||||||
|
# await and get the result from the awaitable
|
||||||
|
result = message.content
|
||||||
|
words = result.split()
|
||||||
|
for word in words:
|
||||||
|
if word in stats:
|
||||||
|
stats[word] += 1
|
||||||
|
else:
|
||||||
|
stats[word] = 1
|
||||||
|
for name, how_many in stats.items():
|
||||||
|
yield name, how_many
|
||||||
|
|
||||||
|
|
||||||
# trunk-ignore(pylint/R0914)
|
# trunk-ignore(pylint/R0914)
|
||||||
# trunk-ignore(pylint/R0915)
|
# trunk-ignore(pylint/R0915)
|
||||||
# trunk-ignore(pylint/R0912)
|
# trunk-ignore(pylint/R0912)
|
||||||
async def wyszukaj(ctx, how_many=0):
|
async def wyszukaj(ctx, how_many=0, slowa_kluczowe=None):
|
||||||
"""
|
"""
|
||||||
Take in a context object and an optional integer parameter "how_many" and perform search
|
Take in a context object and an optional integer parameter "how_many" and perform search
|
||||||
operation on music library.
|
operation on music library.
|
||||||
@@ -772,6 +894,9 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
"""
|
"""
|
||||||
# TODO: Potem dorobić wyszukiwania po kawałkach słów
|
# TODO: Potem dorobić wyszukiwania po kawałkach słów
|
||||||
# i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu.
|
# i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu.
|
||||||
|
if slowa_kluczowe:
|
||||||
|
word_list = slowa_kluczowe
|
||||||
|
else:
|
||||||
word_list = ctx.message.content.split()
|
word_list = ctx.message.content.split()
|
||||||
logger.info("Wyszukuje")
|
logger.info("Wyszukuje")
|
||||||
search_weight = []
|
search_weight = []
|
||||||
@@ -783,15 +908,13 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
skip_start = 2
|
skip_start = 2
|
||||||
else:
|
else:
|
||||||
skip_start = 1
|
skip_start = 1
|
||||||
for word in word_list[skip_start:]:
|
async for word in async_iterator_generator(word_list[skip_start:]):
|
||||||
token_weight = len(word)
|
token_weight = len(word)
|
||||||
logger.info("Słowo kluczowe: %s", word)
|
logger.info("Słowo kluczowe: %s", word)
|
||||||
itr = 0
|
itr = 0
|
||||||
for file in music_file_list:
|
async for file in async_iterator_generator(music_file_list):
|
||||||
if platform == "win32":
|
file = file.split(SEPARATOR_FILE_PATH)
|
||||||
file = file.split("\\")
|
|
||||||
else:
|
|
||||||
file = file.split("/")
|
|
||||||
char_remove = [
|
char_remove = [
|
||||||
".",
|
".",
|
||||||
"^",
|
"^",
|
||||||
@@ -804,6 +927,7 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
"[",
|
"[",
|
||||||
"]",
|
"]",
|
||||||
"\\",
|
"\\",
|
||||||
|
"/",
|
||||||
"|",
|
"|",
|
||||||
"(",
|
"(",
|
||||||
")",
|
")",
|
||||||
@@ -814,9 +938,9 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
"mp3",
|
"mp3",
|
||||||
]
|
]
|
||||||
all_words = []
|
all_words = []
|
||||||
for f_iter in file:
|
async for f_iter in async_iterator_generator(file):
|
||||||
for char in char_remove:
|
async for char in async_iterator_generator(char_remove):
|
||||||
f_iter = f_iter.replace(char, "")
|
f_iter = await remove_characters(f_iter, char)
|
||||||
tmp = f_iter.split()
|
tmp = f_iter.split()
|
||||||
all_words.extend(tmp)
|
all_words.extend(tmp)
|
||||||
pingu = 1
|
pingu = 1
|
||||||
@@ -826,19 +950,21 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
else:
|
else:
|
||||||
skip = 4
|
skip = 4
|
||||||
matched_times = 1
|
matched_times = 1
|
||||||
for itm in all_words[skip:]:
|
async for itm in async_iterator_generator(all_words[skip:]):
|
||||||
pingu += 1
|
pingu += 1
|
||||||
pattern = ".*" + word + ".*"
|
pattern = ".*" + word + ".*"
|
||||||
if re.match(pattern, itm, re.IGNORECASE):
|
if re.match(pattern, itm, re.IGNORECASE):
|
||||||
temp_weight = (
|
temp_weight = (
|
||||||
search_weight[itr][0]
|
search_weight[itr][0]
|
||||||
+ (token_weight + (pingu**1.5) / pattern_len) / matched_times
|
+ (token_weight + (pingu**1.5) /
|
||||||
|
pattern_len) / matched_times
|
||||||
)
|
)
|
||||||
search_weight[itr] = temp_weight, music_file_list[itr]
|
search_weight[itr] = temp_weight, music_file_list[itr]
|
||||||
matched_times += 1
|
matched_times += 1
|
||||||
itr += 1
|
itr += 1
|
||||||
|
|
||||||
logger.info("Stworzylem tablice wag zajęło mi to %s", datetime.now() - time_start)
|
logger.info("Stworzylem tablice wag zajęło mi to %s",
|
||||||
|
datetime.now() - time_start)
|
||||||
time_start = datetime.now()
|
time_start = datetime.now()
|
||||||
item_to_search = await max_weight(search_weight)
|
item_to_search = await max_weight(search_weight)
|
||||||
itr = 0
|
itr = 0
|
||||||
@@ -860,6 +986,18 @@ async def wyszukaj(ctx, how_many=0):
|
|||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
|
|
||||||
|
async def remove_characters(string, character):
|
||||||
|
"""
|
||||||
|
The `remove_characters` function removes all occurrences of a specified character from a given
|
||||||
|
string.
|
||||||
|
|
||||||
|
:param string: The string parameter is the input string from which characters will be removed
|
||||||
|
:param character: The character parameter is the character that you want to remove from the string
|
||||||
|
:return: a new string where all occurrences of the specified character have been removed.
|
||||||
|
"""
|
||||||
|
return string.replace(character, "")
|
||||||
|
|
||||||
|
|
||||||
async def max_weight(lista):
|
async def max_weight(lista):
|
||||||
"""
|
"""
|
||||||
Take a list of weights and return the maximum weight.
|
Take a list of weights and return the maximum weight.
|
||||||
@@ -1317,7 +1455,7 @@ async def zrob_mi_plejliste(ctx):
|
|||||||
if metadata.tag.title:
|
if metadata.tag.title:
|
||||||
reply += " z prywatnej kolekcji Hammera i na Twoją specjalną rpośbę.\n"
|
reply += " z prywatnej kolekcji Hammera i na Twoją specjalną rpośbę.\n"
|
||||||
else:
|
else:
|
||||||
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera."
|
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera.\n"
|
||||||
|
|
||||||
index += 1
|
index += 1
|
||||||
if len(reply) > 1800:
|
if len(reply) > 1800:
|
||||||
@@ -1487,7 +1625,14 @@ async def get_image_stable_diffusion(ctx):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# @client.hybrid_command()
|
# trunk-ignore(mypy/arg-type)
|
||||||
|
@client.hybrid_command(
|
||||||
|
name="zagraj_muzyke_mego_ludu",
|
||||||
|
description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ",
|
||||||
|
guild=discord.Object(id=664789470779932693),
|
||||||
|
)
|
||||||
|
# trunk-ignore(pylint/R0912)
|
||||||
|
# trunk-ignore(pylint/R0915)
|
||||||
async def zagraj_muzyke_mego_ludu(ctx):
|
async def zagraj_muzyke_mego_ludu(ctx):
|
||||||
"""
|
"""
|
||||||
Play completeley random playlist based on messaging history.
|
Play completeley random playlist based on messaging history.
|
||||||
@@ -1497,9 +1642,117 @@ async def zagraj_muzyke_mego_ludu(ctx):
|
|||||||
channel, the author, and other relevant details. In this case, it is being passed as a parameter to
|
channel, the author, and other relevant details. In this case, it is being passed as a parameter to
|
||||||
the `get_image
|
the `get_image
|
||||||
"""
|
"""
|
||||||
|
stats = {}
|
||||||
|
if ctx:
|
||||||
|
logger.info("Zagraj muzyke mego ludu: wywolane")
|
||||||
|
stat_iter = get_stats(ctx, MUZYKA_MOJEGO_LUDU_HISTORIA)
|
||||||
|
async for name, how_many in stat_iter:
|
||||||
|
if len(name) > 3:
|
||||||
|
stats[name] = how_many
|
||||||
|
|
||||||
|
sorted_stats = sorted(stats.items(), key=lambda x: x[1])
|
||||||
|
logger.info("Zagraj muzyke mego ludu:zebrano statystyki")
|
||||||
|
key_words = []
|
||||||
|
for stat in sorted_stats:
|
||||||
|
key_words.append(stat[0])
|
||||||
|
logger.info(sorted_stats[:MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE])
|
||||||
|
logger.info(key_words[:MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE])
|
||||||
|
logger.info(sorted_stats[-MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE:])
|
||||||
|
logger.info(key_words[-MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE:])
|
||||||
|
|
||||||
|
final_key_words = key_words[:MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE]
|
||||||
|
final_key_words.extend(key_words[-MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE:])
|
||||||
|
reply = "Wygenerowana plejlista:\n"
|
||||||
|
async with ctx.typing():
|
||||||
|
logger.info("Zaczynam szukać timestamp %s", datetime.now())
|
||||||
|
search_time_glob = datetime.now()
|
||||||
|
file = await wyszukaj(ctx=ctx, how_many=MUZYKA_MOJEGO_LUDU_PLAJLISTA, slowa_kluczowe=final_key_words)
|
||||||
|
logger.info("Zagraj muzyke mego ludu:wygenerowano plejliste")
|
||||||
|
logger.info(file)
|
||||||
|
logger.info(
|
||||||
|
"Koniec szukania(timestamp %s zajęło %s",
|
||||||
|
datetime.now(),
|
||||||
|
datetime.now() - search_time_glob,
|
||||||
|
)
|
||||||
|
index = 1
|
||||||
|
if file:
|
||||||
|
for plik in file:
|
||||||
|
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||||
|
MUZYKA["queue"].insert(0, plik[1])
|
||||||
|
MUZYKA["requestor"].insert(0, ctx.author)
|
||||||
|
metadata = eyed3.load(plik[1])
|
||||||
|
if metadata and metadata.tag:
|
||||||
|
if metadata.tag.title:
|
||||||
|
reply += f"{index} {metadata.tag.title}"
|
||||||
|
else:
|
||||||
|
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera."
|
||||||
|
|
||||||
|
if metadata.tag.artist:
|
||||||
|
reply += f" wykonawcy {metadata.tag.artist}"
|
||||||
|
if metadata.tag.album:
|
||||||
|
reply += f" z albumu {metadata.tag.album}"
|
||||||
|
if metadata.tag.title:
|
||||||
|
reply += " z prywatnej kolekcji Hammera i na Twoją specjalną rpośbę.\n"
|
||||||
|
else:
|
||||||
|
reply += f"{index}. {plik[1]} z prywatnej kolekcji Hammera.\n"
|
||||||
|
|
||||||
|
index += 1
|
||||||
|
if len(reply) > 1800:
|
||||||
|
await ctx.send(reply)
|
||||||
|
reply = ""
|
||||||
|
else:
|
||||||
|
await ctx.send(
|
||||||
|
"Obawiam się że nie mogę nic znaleźć u siebie. Spróbuj komendy '$dej_co_ze_spotifaja' jeśli masz link"
|
||||||
|
)
|
||||||
|
await ctx.send(reply)
|
||||||
|
logger.info("Plejlista zrobiona")
|
||||||
|
|
||||||
|
|
||||||
|
# trunk-ignore(mypy/arg-type)
|
||||||
|
@client.hybrid_command(
|
||||||
|
name="parametry_muzyki_mego_ludu",
|
||||||
|
description="Konfiguruje komende zagraj muzyke mojego ludu",
|
||||||
|
guild=discord.Object(id=664789470779932693),
|
||||||
|
)
|
||||||
|
async def parametry_muzyki_mego_ludu(ctx, ile_historii=1500, ile_slow_kluczowych=15, jak_dluga_plejlista=30):
|
||||||
|
"""
|
||||||
|
The function `parametry_muzyki_mego_ludu` sets global variables for the number of history entries,
|
||||||
|
number of keywords, and length of playlist for a music application.
|
||||||
|
|
||||||
|
:param ctx: The `ctx` parameter is typically used in Discord.py, a Python library for creating
|
||||||
|
Discord bots. It represents the context of the command being executed, including information about
|
||||||
|
the message, the server, and the user who invoked the command
|
||||||
|
:param ile_historii: The parameter "ile_historii" represents the number of history items for the
|
||||||
|
music playlist, defaults to 1500 (optional)
|
||||||
|
:param ile_slow_kluczowych: The parameter "ile_slow_kluczowych" represents the number of keywords or
|
||||||
|
key phrases related to music that you want to include in your analysis or search, defaults to 30
|
||||||
|
(optional)
|
||||||
|
:param jak_dluga_plejlista: The parameter "jak_dluga_plejlista" determines the length of the
|
||||||
|
playlist. It specifies how many songs should be included in the playlist, defaults to 30 (optional)
|
||||||
|
"""
|
||||||
|
|
||||||
if ctx:
|
if ctx:
|
||||||
pass
|
async with ctx.typing():
|
||||||
|
# if ':' in ile_historii:
|
||||||
|
# _, _, ile_historii = ile_historii.partition(':')
|
||||||
|
# if ':' in ile_slow_kluczowych:
|
||||||
|
# _, _, ile_slow_kluczowych = ile_slow_kluczowych.partition(':')
|
||||||
|
# if ':' in jak_dluga_plejlista:
|
||||||
|
# _, _, jak_dluga_plejlista = jak_dluga_plejlista.partition(':')
|
||||||
|
try:
|
||||||
|
global MUZYKA_MOJEGO_LUDU_HISTORIA # pylint: disable=global-statement
|
||||||
|
global MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE # pylint: disable=global-statement
|
||||||
|
global MUZYKA_MOJEGO_LUDU_PLAJLISTA # pylint: disable=global-statement
|
||||||
|
logger.info("Długość historii wyszukiwania: %s\n Ilość słów kluczowych: %s\n Długość plejlisty do wygenerowanie: %s", MUZYKA_MOJEGO_LUDU_HISTORIA, MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE, MUZYKA_MOJEGO_LUDU_PLAJLISTA)
|
||||||
|
ctx.send(f"Dotychczasowe wartośći:\n Długość historii wyszukiwania: {MUZYKA_MOJEGO_LUDU_HISTORIA}\n Ilość słów kluczowych: {MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE}\n Długość plejlisty do wygenerowanie:{MUZYKA_MOJEGO_LUDU_PLAJLISTA}")
|
||||||
|
MUZYKA_MOJEGO_LUDU_HISTORIA = ile_historii
|
||||||
|
MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE = ile_slow_kluczowych
|
||||||
|
MUZYKA_MOJEGO_LUDU_PLAJLISTA = jak_dluga_plejlista
|
||||||
|
logger.info("Długość historii wyszukiwania: %s\n Ilość słów kluczowych: %s\n Długość plejlisty do wygenerowanie: %s", MUZYKA_MOJEGO_LUDU_HISTORIA, MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE, MUZYKA_MOJEGO_LUDU_PLAJLISTA)
|
||||||
|
ctx.send(f"Zmienione wartośći:\n Długość historii wyszukiwania: {MUZYKA_MOJEGO_LUDU_HISTORIA}\n Ilość słów kluczowych: {MUZYKA_MOJEGO_LUDU_SLOWA_KLUCZOWE}\n Długość plejlisty do wygenerowanie:{MUZYKA_MOJEGO_LUDU_PLAJLISTA}")
|
||||||
|
except discord.ext.commands.errors.BadArgument as exce:
|
||||||
|
ctx.send("Spierdalaj")
|
||||||
|
logger.info(exce)
|
||||||
|
|
||||||
|
|
||||||
# *================================== Run
|
# *================================== Run
|
||||||
|
|||||||
@@ -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",
|
"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?"
|
"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?"
|
||||||
|
|||||||
@@ -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",
|
"role": "user",
|
||||||
"content": "Hammer - The Bartender:Opowiedz mi o kawa\u0142ku Miejcie Nadzieje wykonawcy Jacek Wojcicki z albumu Live Character"
|
"content": "Hammer - The Bartender:Opowiedz mi o kawa\u0142ku Miejcie Nadzieje wykonawcy Jacek Wojcicki z albumu Live Character"
|
||||||
|
|||||||
+149
-105
@@ -1,28 +1,28 @@
|
|||||||
{
|
{
|
||||||
"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": {
|
"word_reactions": {
|
||||||
"fabryczka": [
|
"fabryczka\\b": [
|
||||||
1103376650487484556,
|
1103376650487484556,
|
||||||
10,
|
10,
|
||||||
0,
|
0,
|
||||||
true,
|
true,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"hammer": [
|
"hammer\\b": [
|
||||||
"Hammer? Chuj o złotym serduszku? Popierdolony w idealnych proporcjach do czystego serduszka? Legendarny zbanowany admin Kinky Little Discord? Legendarny kochanek? \"Bardzo fajny sadysta\":tm: Właściciel \"Domu który czyni pijanym\"? \nNie znam. Nie słyszałem",
|
"Hammer? Chuj o złotym serduszku? Popierdolony w idealnych proporcjach do czystego serduszka? Legendarny zbanowany admin Kinky Little Discord? Legendarny kochanek? \"Bardzo fajny sadysta\":tm: Właściciel \"Domu który czyni pijanym\"? \nNie znam. Nie słyszałem",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"chujzłoty": [
|
"chujzłoty\\b": [
|
||||||
"Eeeee.... Szefie... ktoś cię woła! Wskazuje na Hammera",
|
"Eeeee.... Szefie... ktoś cię woła! Wskazuje na Hammera",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"indie": [
|
"indie\\b": [
|
||||||
"Indie? *Wyciąga rewolwerową wyrzutnię taktycznych bomb jądrowych* Gdzie??? *Zaczyna się maniakalnie śmiać*",
|
"Indie? *Wyciąga rewolwerową wyrzutnię taktycznych bomb jądrowych* Gdzie??? *Zaczyna się maniakalnie śmiać*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
@@ -36,280 +36,217 @@
|
|||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"chuj": [
|
"chuj\\b": [
|
||||||
"Eeeee.... Szefie... ktoś cię woła! Wskazuje na Hammera",
|
"Eeeee.... Szefie... ktoś cię woła! Wskazuje na Hammera",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"Sowa": [
|
"jeż\\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ż": [
|
|
||||||
"*Ś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ą*",
|
"*Ś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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"savil": [
|
"savil\\b": [
|
||||||
"*Znikąd zaczyna być słychać muzykę. Conjurer nuci* There must be some way out of here... Said the joker to the thief...",
|
"*Znikąd zaczyna być słychać muzykę. Conjurer nuci* There must be some way out of here... Said the joker to the thief...",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"zinnejbajki": [
|
"zinnejbajki\\b": [
|
||||||
"ZInnejBajki? Nie wcale nie żywi się krwią. To pogłoski. *Nieudolnie chowa za plecami plastikowy pakiet z dużym napisem AB RH+ do lodówki na drinki*",
|
"ZInnejBajki? Nie wcale nie żywi się krwią. To pogłoski. *Nieudolnie chowa za plecami plastikowy pakiet z dużym napisem AB RH+ do lodówki na drinki*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"Bluszcz": [
|
"jaeger\\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": [
|
|
||||||
"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ć*",
|
"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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"lena": [
|
"lena\\b": [
|
||||||
"Lena? Nie nie miałem NIC wspólnego ze zniknięciem... A czekaj - o którą z osób znikniętych pytasz? *Zaczyna nucić* Boogie ługi, znikną wrógi",
|
"Lena? Nie nie miałem NIC wspólnego ze zniknięciem... A czekaj - o którą z osób znikniętych pytasz? *Zaczyna nucić* Boogie ługi, znikną wrógi",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"rafikowy": [
|
"rafikowy\\b": [
|
||||||
"Rafikowy? *wyłamuje kostki* Jak masz PROBLEM z tym super dzieciakiem - to masz problem ze mną. I resztą Nocnej Zmiany. *wali pięścią w stół* Ka-pe-wu?",
|
"Rafikowy? *wyłamuje kostki* Jak masz PROBLEM z tym super dzieciakiem - to masz problem ze mną. I resztą Nocnej Zmiany. *wali pięścią w stół* Ka-pe-wu?",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"kurwa": [
|
"shila\\b": [
|
||||||
"Kurwa? Ale która... Ta mityczna czy Toćka?",
|
|
||||||
15.0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
],
|
|
||||||
"shila": [
|
|
||||||
"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*",
|
"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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"mienco": [
|
"mienco\\b": [
|
||||||
"*Wyciąga kawał krwawiącego króliczego udka* Frecia, Frecia, Frecia... kici, kici, taś taś.... *Światło gaśnie na sekunddę i po tym jak się zapala cały bar jest uwalony krwią* Za każdym razem *wzdycha*",
|
"*Wyciąga kawał krwawiącego króliczego udka* Frecia, Frecia, Frecia... kici, kici, taś taś.... *Światło gaśnie na sekunddę i po tym jak się zapala cały bar jest uwalony krwią* Za każdym razem *wzdycha*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"tatarek": [
|
"tatarek\\b": [
|
||||||
"Tatarek? Nie dramatyzuj....",
|
"Tatarek? Nie dramatyzuj....",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"krowa": [
|
"krowa\\b": [
|
||||||
"Krówka? Nie dramatyzuj....",
|
"Krówka? Nie dramatyzuj....",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"krówka": [
|
"krówka\\b": [
|
||||||
"Krówka? Nie dramatyzuj....",
|
"Krówka? Nie dramatyzuj....",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"cielak": [
|
"jessenia\\b": [
|
||||||
"Krówka? Nie dramatyzuj....",
|
|
||||||
15.0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
],
|
|
||||||
"cielaczek": [
|
|
||||||
"Krówka? Nie dramatyzuj....",
|
|
||||||
15.0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
],
|
|
||||||
"jessenia": [
|
|
||||||
"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",
|
"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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"enterix": [
|
"enterix\\b": [
|
||||||
"Enterix? Chodząca encyklopedia sprzętu BDSM... Jeśli On o czymś nie słyszał to to nie istnieje.",
|
"Enterix? Chodząca encyklopedia sprzętu BDSM... Jeśli On o czymś nie słyszał to to nie istnieje.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"aswerus": [
|
"aswerus\\b": [
|
||||||
"Aswerus? Bardzo miły człowiek. Bardzo się stara być miły. Szacun - ja nawet nie próbuje.",
|
"Aswerus? Bardzo miły człowiek. Bardzo się stara być miły. Szacun - ja nawet nie próbuje.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"szeherezada": [
|
"szeherezada\\b": [
|
||||||
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"szehera": [
|
"szehera\\b": [
|
||||||
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"szechera": [
|
"szechera\\b": [
|
||||||
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
"Szeherezada? BDSMowa Mata Hari. Tylko na tyle cwana że zdecydowanie lepiej skończy.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"orja": [
|
"orja\\b": [
|
||||||
"Orja? Nie wkurzamy goreańskich kajir. Można batem dostać:D",
|
"Orja? Nie wkurzamy goreańskich kajir. Można batem dostać:D",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"khattaw": [
|
"khattaw\\b": [
|
||||||
"*Zza ściany zaczyna dobywać się przytłumione dobre techenko. Conjurer blednie* Nie.... znowu ona.... Khaaaa *Mijają 72 godziny nieustającego raveu. Khat nadal tańczy. Elemental leży na podłodze pod kroplówką*",
|
"*Zza ściany zaczyna dobywać się przytłumione dobre techenko. Conjurer blednie* Nie.... znowu ona.... Khaaaa *Mijają 72 godziny nieustającego raveu. Khat nadal tańczy. Elemental leży na podłodze pod kroplówką*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"kwadraty": [
|
"kwadraty\\b": [
|
||||||
"Kwadraty? Przemiły człowiek. Myślałem że jak go trzy napalone laski napadły to będę musiał wkroczyć... Tak go lały... A on potem cały w skowronkach. Szacun dla gościa. Zajebisty ziomek.",
|
"Kwadraty? Przemiły człowiek. Myślałem że jak go trzy napalone laski napadły to będę musiał wkroczyć... Tak go lały... A on potem cały w skowronkach. Szacun dla gościa. Zajebisty ziomek.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"jules": [
|
"jules\\b": [
|
||||||
"Jules? Świetna diablica. Zaraz... Jak to szło... All is dust? Krew dla boga krwi? Pokaż cycki dla Slaanesh? Iron within, iron without? Coś w ten deseń.",
|
"Jules? Świetna diablica. Zaraz... Jak to szło... All is dust? Krew dla boga krwi? Pokaż cycki dla Slaanesh? Iron within, iron without? Coś w ten deseń.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"elokwentna": [
|
"elokwentna\\b": [
|
||||||
"O matko. Znowu ta dyskusja? Hammer ma stary słownik gdzie elokwentna i pyskata są praktycznie synonimami. Jedyna różnica że swojej uległej można za bycie pyskatym dać po dupie.",
|
"O matko. Znowu ta dyskusja? Hammer ma stary słownik gdzie elokwentna i pyskata są praktycznie synonimami. Jedyna różnica że swojej uległej można za bycie pyskatym dać po dupie.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"elokwencja": [
|
"elokwencja\\b": [
|
||||||
"O matko. Znowu ta dyskusja? Hammer ma stary słownik gdzie elokwentna i pyskata są praktycznie synonimami. Jedyna różnica że swojej uległej można za bycie pyskatym dać po dupie.",
|
"O matko. Znowu ta dyskusja? Hammer ma stary słownik gdzie elokwentna i pyskata są praktycznie synonimami. Jedyna różnica że swojej uległej można za bycie pyskatym dać po dupie.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"pyskata": [
|
"kld\\b": [
|
||||||
"Pyskata? A teraz mówisz o Tatarku czy o tej drugiej? *Zauważa spojrzenie Hammera* Taaaak o Tatarku.",
|
"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
|
|
||||||
],
|
|
||||||
"kld": [
|
|
||||||
"KLD? Burdel większy niż u Hammera.... Chociaż ten już sprząta.... Burdel większy niż u Hammera zanim zaczął sprzątać.",
|
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"burdel": [
|
"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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"xo": [
|
"xo\\b": [
|
||||||
"Xo? Jejku. Taka mała dziewczynka. A lać ją można godzinami. Sam się bym zasapał. No i sznurki ładne wiąże.",
|
"Xo? Jejku. Taka mała dziewczynka. A lać ją można godzinami. Sam się bym zasapał. No i sznurki ładne wiąże.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"ziemniaczek": [
|
"panifretka\\b": [
|
||||||
"Mały. PODŁY!!! PSYCHOPAT!!!!! Ahahahahaha..... *Strzela z karabinu maszynowego w sufit*",
|
|
||||||
15.0,
|
|
||||||
0,
|
|
||||||
false,
|
|
||||||
false
|
|
||||||
],
|
|
||||||
"toćka": [
|
|
||||||
"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": [
|
|
||||||
"*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": [
|
|
||||||
"*Ś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",
|
"*Ś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,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"frecia": [
|
"frecia\\b": [
|
||||||
"Kochana pluszowa delikatna sadystka *patrzy na Fretkę, orientuje się co ta robi* - Nie Frecia proszę nie wpinaj tego penisa do kontaktu, zła Fretka, niedobra Sadystka *Następuje wybuch snopu iskier i zapada ciemność*",
|
"Kochana pluszowa delikatna sadystka *patrzy na Fretkę, orientuje się co ta robi* - Nie Frecia proszę nie wpinaj tego penisa do kontaktu, zła Fretka, niedobra Sadystka *Następuje wybuch snopu iskier i zapada ciemność*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"wolfram": [
|
"wolfram\\b": [
|
||||||
"A kolega po fachu. Karczmarz ze wsi pod Łodzią. Warszyce? Warszomin? Coś takiego. Spoko ziomek. Coprawda nasza stacja kosmiczna jest większa od jego karczmy - ale nie wszystko da się zrobić w polu grawitacyjnym planety. Jeżu mówi że jest bardem z naczelnych... No Homo Sapiens w końcu.",
|
"A kolega po fachu. Karczmarz ze wsi pod Łodzią. Warszyce? Warszomin? Coś takiego. Spoko ziomek. Coprawda nasza stacja kosmiczna jest większa od jego karczmy - ale nie wszystko da się zrobić w polu grawitacyjnym planety. Jeżu mówi że jest bardem z naczelnych... No Homo Sapiens w końcu.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"fallain": [
|
"fallain\\b": [
|
||||||
"Kochana Krówka. Skłonność do dramatów i zakrwawiania ścian. Jedna z kilku NAPRAWDE srogich masochistek... Ach ta krew :drool:",
|
"Kochana Krówka. Skłonność do dramatów i zakrwawiania ścian. Jedna z kilku NAPRAWDE srogich masochistek... Ach ta krew :drool:",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
@@ -323,47 +260,154 @@
|
|||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"conjurer": [
|
"conjurer\\b": [
|
||||||
"Kto mnie wołał? Czego chciał? Jak chcesz pogadać to napisz **Conjurer:** i powiedz co masz na myśli. Jak chcesz żebym Ci coś narysował napisz **imaginuje sobie** i tak samo. Moge też Ci opowiedzieć o fabryczce",
|
"Kto mnie wołał? Czego chciał? Jak chcesz pogadać to napisz **Conjurer:** i powiedz co masz na myśli. Jak chcesz żebym Ci coś narysował napisz **imaginuje sobie** i tak samo. Moge też Ci opowiedzieć o fabryczce",
|
||||||
1200.0,
|
1200.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"święta": [
|
"święta\\b": [
|
||||||
"Święta Ladacznica? Przyjazna osóbka. Bardzo. Jak wilk. Z wielkimi kłami. Strasznie ją lubię. Tak samo nie lubi przemocowców jak ja i Hammer",
|
"Święta Ladacznica? Przyjazna osóbka. Bardzo. Jak wilk. Z wielkimi kłami. Strasznie ją lubię. Tak samo nie lubi przemocowców jak ja i Hammer",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"ladacznica": [
|
"ladacznica\\b": [
|
||||||
"Święta Ladacznica? Oj tak. Jeśli okazuje się że ktoś jej naciśnie na odcisk zostaje pożarty w całości... Dobra jest.",
|
"Święta Ladacznica? Oj tak. Jeśli okazuje się że ktoś jej naciśnie na odcisk zostaje pożarty w całości... Dobra jest.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"saint": [
|
"saint\\b": [
|
||||||
"Saint Harlot? Ten jej uśmiech. Potrafi nim wyrazić wszystko. Zarówno żeby rozmówca się ucieszył i wyluzował... Jak i zesrał ze strachu.",
|
"Saint Harlot? Ten jej uśmiech. Potrafi nim wyrazić wszystko. Zarówno żeby rozmówca się ucieszył i wyluzował... Jak i zesrał ze strachu.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
"harlot": [
|
"harlot\\b": [
|
||||||
"Saint Harlot? Wielkie kły. Wielkie pazury. Puchate mięciutkie futerko. Nie należy irytować. No i przemocowcy znikają w jej okolicy 'przypadkiem'.",
|
"Saint Harlot? Wielkie kły. Wielkie pazury. Puchate mięciutkie futerko. Nie należy irytować. No i przemocowcy znikają w jej okolicy 'przypadkiem'.",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
false
|
false
|
||||||
],
|
],
|
||||||
|
"same plusy[\\s\\.]*": [
|
||||||
|
"...Jak na cmentarzu",
|
||||||
|
15.0,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
false
|
||||||
|
],
|
||||||
"(oj\\.*\\s*){3,}": [
|
"(oj\\.*\\s*){3,}": [
|
||||||
"Widzę że szykuje się wpierdol. *Przeładowuje ręczną rewolwerową wyrzutnię granatów termojądrowych i szeroko się uśmiecha w kierunku Hammera i Wykidajłów*",
|
"Widzę że szykuje się wpierdol. *Przeładowuje ręczną rewolwerową wyrzutnię granatów termojądrowych i szeroko się uśmiecha w kierunku Hammera i Wykidajłów*",
|
||||||
15.0,
|
15.0,
|
||||||
0,
|
0,
|
||||||
false,
|
false,
|
||||||
true
|
true
|
||||||
|
],
|
||||||
|
"revalyacyjnie\\b": [
|
||||||
|
"Zajebisty dowcip szefie. Na pewno się \"Twojej Byłej Dziewczynie\":tm: spodoba.",
|
||||||
|
15.0,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
],
|
||||||
|
"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
|
||||||
|
],
|
||||||
|
"liga legend\\b": [
|
||||||
|
"Legends Never Die powiadają. Chyba że gra Hammer. 0/17/0? No problem",
|
||||||
|
15.0,
|
||||||
|
0,
|
||||||
|
false,
|
||||||
|
true
|
||||||
|
],
|
||||||
|
"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
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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."
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user