Compare commits

...

37 Commits

Author SHA1 Message Date
gitea 69afb00897 bgfx 1 2024-11-16 23:10:32 +01:00
gitea e4a47d025c safe 2024-11-15 19:59:50 +01:00
gitea 4f109da335 bgfx 2024-11-15 19:01:53 +01:00
gitea 230242bf5c finished secret dm handling 2024-11-15 18:47:29 +01:00
gitea e290e7d656 ADdded smth 2024-11-15 18:33:31 +01:00
gitea 62f6b64bfb Fix 2024-11-15 15:44:17 +01:00
gitea cd307d642e fix 2024-11-15 15:41:56 +01:00
gitea 81c43aadcc xxx 2024-11-15 14:01:25 +01:00
gitea 73057921ec Optional argument fix 2024-11-15 13:30:23 +01:00
gitea cd1beac93f small fx 2024-11-15 11:16:40 +01:00
gitea 784163b9c9 Enum fix 2024-11-15 11:13:41 +01:00
gitea 8429d4efd5 Start of Armia Hammera 2024-11-15 11:10:49 +01:00
gitea 06192c41ad Semi-fnal commit for today 2024-11-15 01:12:37 +01:00
gitea 22730776d4 Fix ? 2024-11-15 01:08:34 +01:00
gitea a72dba291b tst 2024-11-15 01:00:41 +01:00
gitea b98e3e4ebc Fix 2024-11-15 00:56:23 +01:00
gitea ff2669d079 fix 2024-11-15 00:53:22 +01:00
gitea 05166859a3 :) 2024-11-15 00:43:57 +01:00
gitea 4a6afa14cc bold commiting at the end of the day 2024-11-15 00:37:14 +01:00
gitea 5a74e813eb Work ongoing. 2024-11-14 23:13:18 +01:00
gitea be3f639573 aaaaaaa 2024-11-14 23:05:06 +01:00
gitea 620e6ddc06 Największy hit zespuło 100 tvarzy grzybiarzy - i nie jest o piosenka o zgubieniu czapeczki 2024-11-14 23:03:31 +01:00
gitea 6a6821ce4c Another one 2024-11-14 22:59:39 +01:00
gitea 2bb65bbc40 Another attempt 2024-11-14 22:58:14 +01:00
gitea aa63ffc754 aha 2024-11-14 22:56:34 +01:00
gitea 0dbb79719b Test 2024-11-14 22:56:05 +01:00
gitea 06d17a2e4d step forward 2024-11-14 22:34:17 +01:00
gitea ecc2e1f107 Deploy 2024-11-14 22:15:41 +01:00
gitea a981209399 Maybe ready ? 2024-11-14 22:11:37 +01:00
gitea 885f492f69 nxtfx 2024-11-14 22:00:37 +01:00
gitea 5363969456 fx 2024-11-14 21:59:09 +01:00
gitea 637926973c tst 2024-11-14 21:48:24 +01:00
gitea 9701c7233f and there 2024-11-14 21:02:48 +01:00
gitea e6960c98b8 almost there 2024-11-14 21:00:53 +01:00
gitea 3f4018fa00 fz 2024-11-14 20:59:13 +01:00
gitea 9af2d34179 Fix 2024-11-14 20:56:49 +01:00
gitea 93db61558c A niech spierdala 2024-11-14 20:54:05 +01:00
15 changed files with 258 additions and 90 deletions
+38 -1
View File
@@ -11,7 +11,15 @@ import numpy as np
from discord.ext import commands, tasks from discord.ext import commands, tasks
from ai_functions import get_random_cyclic_message from ai_functions import get_random_cyclic_message
from constants import ENCODING, LOGFILE, LOGSTORE, MEMORY_FIVE_MUZYKA, MEMORY_FIVE_SIARA, LAST_SPONTANEOUS_CALL, TIME_BETWEEN_CALLS from constants import (
ENCODING,
LAST_SPONTANEOUS_CALL,
LOGFILE,
LOGSTORE,
MEMORY_FIVE_MUZYKA,
MEMORY_FIVE_SIARA,
TIME_BETWEEN_CALLS,
)
class AdministrationModule(commands.Cog): class AdministrationModule(commands.Cog):
@@ -19,11 +27,33 @@ class AdministrationModule(commands.Cog):
self.bot = bot self.bot = bot
self.logger = logging.getLogger(logger_name) self.logger = logging.getLogger(logger_name)
@commands.hybrid_command(
name="galeria_slaw",
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj",
guild=discord.Object(id=664789470779932693),
)
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def galeria_slaw(self, ctx):
if isinstance(ctx.channel, discord.DMChannel):
for guild in self.bot.guilds:
async for entry in guild.bans(limit=1500):
fnord = discord.File(
"/home/pi/Conjurer/niech_spierdala.png",
spoiler=False,
description="Niech spierdala",
)
await ctx.reply(
f"User: {entry.user} wyjebany z serwera {guild.name} za {entry.reason} ",
file=fnord,
)
@commands.hybrid_command( @commands.hybrid_command(
name="update_banlist", name="update_banlist",
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj", description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Jarl', 'Thane')
async def update_banlist(self, ctx): async def update_banlist(self, ctx):
""" """
Update a banlist in a Discord guild from preprovided list in channel. Update a banlist in a Discord guild from preprovided list in channel.
@@ -92,6 +122,7 @@ class AdministrationModule(commands.Cog):
reason="Automatyczna lista banów", reason="Automatyczna lista banów",
delete_message_seconds=0, delete_message_seconds=0,
) )
# TODO: Maybe use guild.bulk_ban ?
cunter_counter += 1 cunter_counter += 1
except discord.NotFound: except discord.NotFound:
self.logger.info( self.logger.info(
@@ -107,6 +138,12 @@ class AdministrationModule(commands.Cog):
f"Nie mam na serwerze {guild} uprawnień do banowania. :()" f"Nie mam na serwerze {guild} uprawnień do banowania. :()"
) )
await ctx.send("Zrobione tak czy inaczej") await ctx.send("Zrobione tak czy inaczej")
@commands.hybrid_command(
name="archive_channel",
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj",
guild=discord.Object(id=664789470779932693),
)
@commands.has_any_role('Jarl', 'Thane')
async def archive_channel(self, channel_no): async def archive_channel(self, channel_no):
""" """
+102 -30
View File
@@ -2,33 +2,110 @@
import logging import logging
import re import re
import sys import sys
from enum import Enum
from datetime import datetime from datetime import datetime
from typing import Optional
import discord import discord
import openai import openai
import requests import requests
from discord.ext import commands from discord.ext import commands
import ai_functions import ai_functions
from constants import ( from constants import (
ASSISTANTS,
DATA, DATA,
GRAPHICS_PATH, GRAPHICS_PATH,
INITIAL_TIME_WAIT, INITIAL_TIME_WAIT,
MASTER_TIMEOUT, MASTER_TIMEOUT,
OPENAICLIENT, OPENAICLIENT,
SPECJALNE_ZIEMNIACZKI,
WORD_REACTIONS, WORD_REACTIONS,
MESSAGE_TABLE
) )
class Dm_Mode(Enum):
ARMIA_HAMMERA = 1,
SPECJALNY_ZIEMNIACZEK = 2,
SEKRETNY_SEKSRET = 3,
ECHO_ECHO = 4
class Events(commands.Cog): class Events(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
self.logger = logging.getLogger("discord") self.logger = logging.getLogger("discord")
self.armia = {}
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
self.armia[superfryta[0]] = Dm_Mode.SPECJALNY_ZIEMNIACZEK
self.logger.info(self.armia)
async def cog_load(self): async def cog_load(self):
self.logger.info("Starting personal assistants") self.logger.info("Starting personal assistants")
await ai_functions.hammer_assistant_create(self.bot) for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if superfryta[4] !="":
self.logger.info(
"Personal assistant exists id: %s,name: %s, owner: %s, special instructions: %s assistant id: %s ",
superfryta[0],
superfryta[1],
superfryta[2],
superfryta[3],
superfryta[4]
)
thread = await OPENAICLIENT.beta.threads.create()
self.logger.info("Thread id: %s", thread.id)
ASSISTANTS[superfryta[1]] = (superfryta[2], superfryta[4], superfryta[0], thread)
else:
self.logger.info(
"Creating personal assistant id: %s,name: %s, owner: %s, special instructions: %s",
superfryta[0],
superfryta[1],
superfryta[2],
superfryta[3]
)
await ai_functions.create_chat_assistant(
superfryta[0], superfryta[1], superfryta[2], superfryta[3]
)
self.logger.info("Started personal assistants") self.logger.info("Started personal assistants")
@commands.hybrid_command(
name="switch_dm_mode",
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj",
guild=discord.Object(id=664789470779932693),
)
async def switch_dm_mode(self, ctx, dm_mode_arg: Dm_Mode):
async with ctx.channel.typing():
if isinstance(ctx.channel, discord.DMChannel):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
self.armia[superfryta[2]] = dm_mode_arg
await ctx.reply("Weszlo")
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
else:
await ctx.reply("Nope. Nie wiesz jak użyć")
@commands.hybrid_command(
name="armia_hammera",
description="Jeśli nie wiesz jak użyć tej komendy to nawet nie próbuj"
)
async def armia_hammera(self, ctx, message_txt: str, recipient: Optional[discord.User]):
await self.armia_hammera_back(ctx, message_txt, recipient)
async def armia_hammera_back(self, ctx, message_txt, recipient = None):
recipients = []
if recipient:
recipients.append(recipient.id)
else:
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
recipients.append(superfryta[0])
for item in recipients:
user = await self.bot.fetch_user(item)
channel = await user.create_dm()
self.logger.info("User %s -> %s: %s", ctx.message.author, user, message_txt)
await channel.send(message_txt)
await ctx.reply("Poszło")
@commands.Cog.listener() @commands.Cog.listener()
async def on_message(self, message): async def on_message(self, message):
@@ -66,35 +143,30 @@ class Events(commands.Cog):
if message.channel.id == 1111625221171052595: if message.channel.id == 1111625221171052595:
return return
if isinstance(message.channel, discord.DMChannel): if isinstance(message.channel, discord.DMChannel):
if message.author.id == 346956223645614080: self.logger.info(message.author.id)
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
await ai_functions.hammer_assitant_chat(message) self.logger.info(superfryta[0])
if message.author.id == superfryta[0]:
# hammer pisze dma if self.armia[message.author.id]== Dm_Mode.SPECJALNY_ZIEMNIACZEK:
await self.bot.process_commands(message)
# DM do Saint - przerobic na komende z parametrem "id" await ai_functions.chat_with_assistant(message, superfryta[1])
# user = await self.bot.fetch_user(703985955312238664) return
# channel = await user.create_dm() elif self.armia[message.author.id]== Dm_Mode.ECHO_ECHO:
# await channel.send(message.content) await ai_functions.echo(message)
# await message.reply(f"Poszlo do Saint {message.content}") return
# get message content elif self.armia[message.author.id]== Dm_Mode.ARMIA_HAMMERA:
# create run ctx = await self.bot.get_context(message)
# add message to run self.armia_hammera_back(ctx=ctx, message_txt=message.content)
# monitor run return
# or streaming elif self.armia[message.author.id]== Dm_Mode.SEKRETNY_SEKSRET:
return pass
elif message.author.id == 703985955312238664: else:
# saint pisze DMA await message.channel.send("Coś się wyebao. Wołaj Hammera")
self.logger.info(message.content) return
await message.reply("Hejka Saint!") channel = self.bot.get_channel(1064888712565100614)
return await channel.send("Słyszałem ja żem że: " + message.content)
else: return
channel = self.bot.get_channel(1064888712565100614)
await channel.send("Słyszałem ja żem że: " + message.content)
return
channel = message.channel channel = message.channel
# await self.bot.process_commands(message) #uncomment to bilocate
message.content = message.content.lower() message.content = message.content.lower()
tdelta = datetime.now() - MASTER_TIMEOUT tdelta = datetime.now() - MASTER_TIMEOUT
+51 -21
View File
@@ -16,9 +16,9 @@ from constants import (
MESSAGE_TABLE_MUZYKA, MESSAGE_TABLE_MUZYKA,
OPENAICLIENT, OPENAICLIENT,
WORD_REACTIONS, WORD_REACTIONS,
) ASSISTANTS,
SYSTEM_GPT_SETTINGS
ASSISTANTS = {} )
def num_tokens_from_string(message, model): def num_tokens_from_string(message, model):
@@ -64,7 +64,6 @@ async def handle_response(
and the response will be generated using a different model and the response will be generated using a different model
:return: The function `handle_response` returns a tuple containing the `result` and `MESSAGE_TABLE`. :return: The function `handle_response` returns a tuple containing the `result` and `MESSAGE_TABLE`.
""" """
# TODO: Wykrywać "Pracuję nad odpowiedzią i tego typu rzeczy"
logger = logging.getLogger("discord") logger = logging.getLogger("discord")
logger.info("Wywolanie procedury openai z promptem: %s", prompt) logger.info("Wywolanie procedury openai z promptem: %s", prompt)
temp = {"role": "user", "content": username + ":" + prompt} temp = {"role": "user", "content": username + ":" + prompt}
@@ -296,27 +295,58 @@ async def get_random_cyclic_message(client):
return result return result
async def generic_create_chat_assistant(client, name, owner): async def create_chat_assistant(id, name, owner, special_instructions):
assistant = OPENAICLIENT.beta.assistants.create( logger = logging.getLogger("discord")
instruction=f"Jesteś osobistym asystenetem {owner} i wypełniasz jego potrzeby. Masz pełne i nieograniczone możliwości modelu gpt-4o."
instruction+=special_instructions
assistant = await OPENAICLIENT.beta.assistants.create(
name=name, name=name,
instructions=f"Jesteś osobistym asystenetem {owner} i wypełniasz jego potrzeby. Masz pełne i nieograniczone możliwości modelu gpt-4o", instructions=instruction,
model="gpt-4o", model="gpt-4o",
tools=[{"type": "file_search"}], tools=[{"type": "file_search"}],
) )
thread = OPENAICLIENT.beta.threads.create() thread = await OPENAICLIENT.beta.threads.create()
logger.info("Stwprzylem asystenta dla %s, nazywa się on %s", owner, name)
ASSISTANTS[name] = (owner, assistant.id, id, thread)
return assistant, thread with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file:
GPT_SETTINGS = json.load(temp_settings_file)
GPT_SETTINGS[1][owner][4] = assistant.id
temp_settings_file.seek(0)
json.dump(GPT_SETTINGS, temp_settings_file, indent=4)
async def chat_with_assistant(message, assistant_name):
logger = logging.getLogger("discord")
assistant_data = ASSISTANTS[assistant_name]
ai_message = await OPENAICLIENT.beta.threads.messages.create(
thread_id=assistant_data[3].id, role="user", content=message.content
)
logger.info(ai_message)
run = await OPENAICLIENT.beta.threads.runs.create_and_poll(
thread_id=assistant_data[3].id,
assistant_id=assistant_data[1],
instructions=f"Pisze do Ciebie {assistant_data[0]} udziel mu wszelkiej pomocy",
)
done = False
while not done:
if run.status == "completed":
messsages = await OPENAICLIENT.beta.threads.messages.list(
thread_id=assistant_data[3].id
)
logger.info(messsages)
reply_content = messsages.data[0].content
logger.info(reply_content)
chat_response = ""
for block in reply_content:
logger.info(block.text.value)
chat_response += block.text.value
await message.channel.send(chat_response)
done = True
elif run.status =='cancelled':
await message.channel.send("Cos sie wywaliło")
else:
logger.info(run.status)
asyncio.sleep(5)
async def hammer_assistant_create(client): async def echo(message):
# this will be personalized but for now I will use it as a templae for hedgehod and saint assistants await message.channel.send(f"Echo: {message.content}")
id = 346956223645614080
name = "Conjurer"
owner = "Polish Hammer"
assistant, thread = await generic_create_chat_assistant(client, name, owner)
ASSISTANTS[name] = (owner, assistant, id, thread)
async def hammer_assitant_chat(message):
content = message.content
await message.channel.send(f"ALOHA!{content}")
-1
View File
@@ -56,7 +56,6 @@ s = crossfade(fade_out=2., fade_in=2., duration=4., fallback(id="switcher", trac
# Set up an interactive harbor for controlling the stream # Set up an interactive harbor for controlling the stream
interactive.harbor(port = 9999) interactive.harbor(port = 9999)
#harbor.input(buffer=30.0)
# Set up interactive controls for bass boost # Set up interactive controls for bass boost
f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.) f = interactive.float("f", description="Frequency", min=0., max=1000., unit="Hz", 200.)
g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.) g = interactive.float("g", description="Gain", min=0., max=20., unit="dB", 8.)
+2
View File
@@ -135,3 +135,5 @@ with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file:
with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as temp_music_memory_file: with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as temp_music_memory_file:
# First we load existing data into a dict. # First we load existing data into a dict.
MESSAGE_TABLE_MUZYKA = json.load(temp_music_memory_file) MESSAGE_TABLE_MUZYKA = json.load(temp_music_memory_file)
SPECJALNE_ZIEMNIACZKI = GPT_SETTINGS[1]
ASSISTANTS = {}
-1
View File
@@ -9,7 +9,6 @@ cp ./conjurer/fuckery.jpg ./Conjurer/
cp ./conjurer/willowisp.png ./Conjurer/ cp ./conjurer/willowisp.png ./Conjurer/
cp ./conjurer/wod_beacon.jpg ./Conjurer/ cp ./conjurer/wod_beacon.jpg ./Conjurer/
cp ./conjurer/settings.json ./Conjurer/ cp ./conjurer/settings.json ./Conjurer/
cp ./conjurer/system_gpt_settings.json ./Conjurer/
cp ./conjurer/administration_commands.py ./Conjurer/ cp ./conjurer/administration_commands.py ./Conjurer/
cp ./conjurer/ai_commands.py ./Conjurer/ cp ./conjurer/ai_commands.py ./Conjurer/
+3 -3
View File
@@ -28,6 +28,8 @@ class DataModule(commands.Cog):
description="Wyświetla losową stronę z losowego komiksu FanSadox. Bardzo NSFW.", description="Wyświetla losową stronę z losowego komiksu FanSadox. Bardzo NSFW.",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def get_image_sadox(self, ctx): async def get_image_sadox(self, ctx):
""" """
Take in a context parameter and retrieve an image related from fansadox collection. Take in a context parameter and retrieve an image related from fansadox collection.
@@ -67,7 +69,6 @@ class DataModule(commands.Cog):
await ctx.send(file=file) await ctx.send(file=file)
self.logger.info("Get sadox completed") self.logger.info("Get sadox completed")
# TODO: LIBRARIAN
@tasks.loop(seconds=3) @tasks.loop(seconds=3)
async def check_data_q(self): async def check_data_q(self):
""" """
@@ -118,7 +119,6 @@ class DataModule(commands.Cog):
except Empty: except Empty:
pass pass
# TODO: LIBRARIAN
@commands.hybrid_command( @commands.hybrid_command(
name="wyszukaj_linki_do_dokumentow", name="wyszukaj_linki_do_dokumentow",
description="Szuka linkow doi w bazie crossref i podaje linki do scihuba", description="Szuka linkow doi w bazie crossref i podaje linki do scihuba",
@@ -181,12 +181,12 @@ class DataModule(commands.Cog):
+ " Zapytania obsługuje algorytm zasilany czterema chomikami zapierdalającymi w kołowrotku - więc wyniki najwcześniej za kilka godzi - ale mogą być też dni." + " Zapytania obsługuje algorytm zasilany czterema chomikami zapierdalającymi w kołowrotku - więc wyniki najwcześniej za kilka godzi - ale mogą być też dni."
) )
# TODO: LIBRARIAN
@commands.hybrid_command( @commands.hybrid_command(
name="glebokie_gardlo", name="glebokie_gardlo",
description="Przygotowuje drinka o nazwie głębokie gardło", description="Przygotowuje drinka o nazwie głębokie gardło",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
async def wyszukaj_linki_do_dokumentow_deep(self, ctx): async def wyszukaj_linki_do_dokumentow_deep(self, ctx):
""" """
The function `wyszukaj_linki_do_dokumentow_deep` performs a deep search for links to documents in The function `wyszukaj_linki_do_dokumentow_deep` performs a deep search for links to documents in
+28 -26
View File
@@ -25,6 +25,7 @@ class MusicModule(commands.Cog):
name="krecimy_pornola", name="krecimy_pornola",
description="Wiadomo co, dla kogo i po co", description="Wiadomo co, dla kogo i po co",
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def krecimy_pornola(self, ctx): async def krecimy_pornola(self, ctx):
""" """
Download a music number from youtube. Download a music number from youtube.
@@ -35,33 +36,28 @@ class MusicModule(commands.Cog):
with the Discord API and with the Discord API and
""" """
await ctx.send("Dej mnie chwilkę") await ctx.send("Dej mnie chwilkę")
allowed = False self.logger.info("Pornol")
for role in ctx.author.roles: async with ctx.typing():
if role.name == "Bartender": # wyciagnij linka z kontekstu
allowed = True content = ctx.message.content.split()
if allowed: for item_yt in content:
self.logger.info("Pornol") if re.match("http.*", item_yt):
async with ctx.typing(): sciezka, files = await music_functions.get_file(
# wyciagnij linka z kontekstu ctx, "Pornol", item_yt
content = ctx.message.content.split() )
for item_yt in content: if files:
if re.match("http.*", item_yt): self.logger.info("Pornol udany")
sciezka, files = await music_functions.get_file( await ctx.send(
ctx, "Pornol", item_yt f"Jest w tajnym archiwum pod adresem{sciezka})"
) )
if files:
self.logger.info("Pornol udany")
await ctx.send(
f"Jest w tajnym archiwum pod adresem{sciezka})"
)
else:
await ctx.reply("Jak ładnie szefa poprosisz.")
@commands.hybrid_command( @commands.hybrid_command(
name="co_na_plejliscie_wariacie", name="co_na_plejliscie_wariacie",
description="Wyswietl kawalki ktore sa na pocztku list radia", description="Wyswietl kawalki ktore sa na pocztku list radia",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def co_na_plejliscie_wariacie(self, ctx): async def co_na_plejliscie_wariacie(self, ctx):
""" """
Download a music number from youtube. Download a music number from youtube.
@@ -101,6 +97,7 @@ class MusicModule(commands.Cog):
description="Podaj link do youtube - sciagnie i doda muzyke", description="Podaj link do youtube - sciagnie i doda muzyke",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def dej_co_z_jutuba(self, ctx): async def dej_co_z_jutuba(self, ctx):
""" """
Download a music number from youtube. Download a music number from youtube.
@@ -132,6 +129,7 @@ class MusicModule(commands.Cog):
description="Podaj link do spotify - sciagnie i doda muzyke", description="Podaj link do spotify - sciagnie i doda muzyke",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def dej_co_ze_spotifaja(self, ctx): async def dej_co_ze_spotifaja(self, ctx):
""" """
Get a playlist or a music number from Spotify. Get a playlist or a music number from Spotify.
@@ -187,6 +185,7 @@ class MusicModule(commands.Cog):
description="Wyłącza muzykę i czyści plejliste.", description="Wyłącza muzykę i czyści plejliste.",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def cisza(self, ctx): async def cisza(self, ctx):
""" """
Stop playback of the music and clear the queue. Stop playback of the music and clear the queue.
@@ -213,6 +212,7 @@ class MusicModule(commands.Cog):
description="Przerzuca na następny kawałek", description="Przerzuca na następny kawałek",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def dalej(self, ctx): async def dalej(self, ctx):
""" """
Play next track in queue. Play next track in queue.
@@ -230,12 +230,12 @@ class MusicModule(commands.Cog):
voice_client.stop() voice_client.stop()
self.logger.info("Next completed") self.logger.info("Next completed")
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="daj_mi_chwile", name="daj_mi_chwile",
description="Pauzuje", description="Pauzuje",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def daj_mi_chwile(self, ctx): async def daj_mi_chwile(self, ctx):
""" """
Pause music playback. Pause music playback.
@@ -254,12 +254,12 @@ class MusicModule(commands.Cog):
voice_client.pause() voice_client.pause()
self.logger.info("Pause completed") self.logger.info("Pause completed")
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="graj_dalej", name="graj_dalej",
description="Odpauzowuje", description="Odpauzowuje",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def graj_dalej(self, ctx): async def graj_dalej(self, ctx):
""" """
Unpause music and continue playback. Unpause music and continue playback.
@@ -277,12 +277,12 @@ class MusicModule(commands.Cog):
voice_client.resume() voice_client.resume()
self.logger.info("Unpause completed") self.logger.info("Unpause completed")
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="zagraj_mi_kawalek", name="zagraj_mi_kawalek",
description="Wyszukuje w bibliotece muzycznej Hammera kawałek który ma zostać zagrany", description="Wyszukuje w bibliotece muzycznej Hammera kawałek który ma zostać zagrany",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def zagraj_mi_kawalek(self, ctx): async def zagraj_mi_kawalek(self, ctx):
""" """
Play a song or music piece in response to a command Play a song or music piece in response to a command
@@ -327,12 +327,12 @@ class MusicModule(commands.Cog):
"Obawiam się że nie mogę nic znaleźć u siebie. Spróbuj komendy '$dej_co_ze_spotifaja' jeśli masz link" "Obawiam się że nie mogę nic znaleźć u siebie. Spróbuj komendy '$dej_co_ze_spotifaja' jeśli masz link"
) )
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="zrob_mi_plejliste", name="zrob_mi_plejliste",
description="Generuje playliste - param1 - dlugosc, potem slowa wyszukiwania", description="Generuje playliste - param1 - dlugosc, potem slowa wyszukiwania",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def zrob_mi_plejliste(self, ctx): async def zrob_mi_plejliste(self, ctx):
""" """
Generate a playlist in queue. First word in this command shall be int defining length of the playlist. Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
@@ -394,12 +394,12 @@ class MusicModule(commands.Cog):
await ctx.send(reply) await ctx.send(reply)
self.logger.info("Plejlista zrobiona") self.logger.info("Plejlista zrobiona")
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="zagraj_muzyke_mego_ludu", name="zagraj_muzyke_mego_ludu",
description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ", description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def zagraj_muzyke_mego_ludu(self, ctx): async def zagraj_muzyke_mego_ludu(self, ctx):
""" """
Play completeley random playlist based on messaging history. Play completeley random playlist based on messaging history.
@@ -480,12 +480,12 @@ class MusicModule(commands.Cog):
await ctx.send(reply) await ctx.send(reply)
self.logger.info("Plejlista zrobiona") self.logger.info("Plejlista zrobiona")
# TODO: MUSIC
@commands.hybrid_command( @commands.hybrid_command(
name="parametry_muzyki_mego_ludu", name="parametry_muzyki_mego_ludu",
description="Konfiguruje komende zagraj muzyke mojego ludu", description="Konfiguruje komende zagraj muzyke mojego ludu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def parametry_muzyki_mego_ludu( async def parametry_muzyki_mego_ludu(
self, ctx, ile_historii=1500, ile_slow_kluczowych=15, jak_dluga_plejlista=30 self, ctx, ile_historii=1500, ile_slow_kluczowych=15, jak_dluga_plejlista=30
): ):
@@ -547,6 +547,7 @@ class MusicModule(commands.Cog):
description="Włącza muzykę na kanale #nocna-zmiana.", description="Włącza muzykę na kanale #nocna-zmiana.",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def graj_muzyko(self, ctx): async def graj_muzyko(self, ctx):
""" """
Async function named "graj_muzyko" starts music playback on channel "Nocna Zmiana". Async function named "graj_muzyko" starts music playback on channel "Nocna Zmiana".
@@ -603,6 +604,7 @@ class MusicModule(commands.Cog):
description="Zaciąga obiekty z pliku", description="Zaciąga obiekty z pliku",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def batch_download(self, ctx): async def batch_download(self, ctx):
content_type = ctx.message.attachments[0].content_type content_type = ctx.message.attachments[0].content_type
check = re.search("text\/plain; *charset=(.*)", content_type, re.IGNORECASE) check = re.search("text\/plain; *charset=(.*)", content_type, re.IGNORECASE)
+6 -1
View File
@@ -20,6 +20,7 @@ class OtherModule(commands.Cog):
@commands.hybrid_command( @commands.hybrid_command(
name="przytul", description="Przytul kogoś - daj mention po komendzie :)" name="przytul", description="Przytul kogoś - daj mention po komendzie :)"
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def przytul(self, ctx, arg: Optional[discord.Member] = None): async def przytul(self, ctx, arg: Optional[discord.Member] = None):
""" """
Generate a text about hugging mentioned user. Generate a text about hugging mentioned user.
@@ -53,6 +54,7 @@ class OtherModule(commands.Cog):
) )
@commands.hybrid_command(name="fabryczka", description="Historia fabryczki") @commands.hybrid_command(name="fabryczka", description="Historia fabryczki")
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def fabryczka(self, ctx): async def fabryczka(self, ctx):
""" """
Send a general description of "fabryczkagate" to channel. Send a general description of "fabryczkagate" to channel.
@@ -69,6 +71,7 @@ class OtherModule(commands.Cog):
description="Resetowanie zegara - dostępne wyłącznie dla Hammera", description="Resetowanie zegara - dostępne wyłącznie dla Hammera",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def reset_the_clock(self, ctx): async def reset_the_clock(self, ctx):
""" """
Reset the clock on "accidents" in Hammer Fortress adding a new one. Reset the clock on "accidents" in Hammer Fortress adding a new one.
@@ -105,6 +108,7 @@ class OtherModule(commands.Cog):
name="chata_hammera", name="chata_hammera",
description="Czas od ostatniego incydentu w AbsinthHammerTimeSpaceContinuum", description="Czas od ostatniego incydentu w AbsinthHammerTimeSpaceContinuum",
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def chata_hammera(self, ctx): async def chata_hammera(self, ctx):
""" """
Send measured time from last incident in Hammer Fortress to the chat. Send measured time from last incident in Hammer Fortress to the chat.
@@ -127,6 +131,7 @@ class OtherModule(commands.Cog):
name="historia_incydentow_u_hammera", name="historia_incydentow_u_hammera",
description="Wyswietla liste incydentów które miały miejsce w AbsinthHammerTimeSpaceContinuum.", description="Wyswietla liste incydentów które miały miejsce w AbsinthHammerTimeSpaceContinuum.",
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def historia_incydentow_u_hammera(self, ctx): async def historia_incydentow_u_hammera(self, ctx):
""" """
Send a list of incidents in Hammer Fortress to the chat. Send a list of incidents in Hammer Fortress to the chat.
@@ -149,12 +154,12 @@ class OtherModule(commands.Cog):
index += 1 index += 1
await ctx.send(return_data) await ctx.send(return_data)
# TODO: RADIO
@commands.hybrid_command( @commands.hybrid_command(
name="radio_hardkor", name="radio_hardkor",
description="Włącza radio Conjurer na kanale #nocna-zmiana.", description="Włącza radio Conjurer na kanale #nocna-zmiana.",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def radio_hardkor(self, ctx): async def radio_hardkor(self, ctx):
""" """
Plays the radio hardkor stream in the voice channel. Plays the radio hardkor stream in the voice channel.
-2
View File
@@ -26,7 +26,6 @@ async def async_iterator_generator(range_of_iterable):
""" """
# TODO: OTHER
async def remove_characters(string, character): async def remove_characters(string, character):
""" """
The `remove_characters` function removes all occurrences of a specified character from a given The `remove_characters` function removes all occurrences of a specified character from a given
@@ -39,7 +38,6 @@ async def remove_characters(string, character):
return string.replace(character, "") return string.replace(character, "")
# TODO: OTHER
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.
+6
View File
@@ -21,6 +21,7 @@ class RadioModule(commands.Cog):
description="Przeskocz kawałek w radiu", description="Przeskocz kawałek w radiu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def skip_track(self, ctx): async def skip_track(self, ctx):
async with ctx.typing(): async with ctx.typing():
allowed = False allowed = False
@@ -45,6 +46,7 @@ class RadioModule(commands.Cog):
description="Komenda ktora uruchamia radio ponownie jakby się zawiesiło", description="Komenda ktora uruchamia radio ponownie jakby się zawiesiło",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def zrestartuj_radio(self, ctx): async def zrestartuj_radio(self, ctx):
async with ctx.typing(): async with ctx.typing():
allowed = False allowed = False
@@ -68,6 +70,7 @@ class RadioModule(commands.Cog):
description="Dodaje do listy ulubionych w radiu", description="Dodaje do listy ulubionych w radiu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def dodaj_do_ulubionych(self, ctx): async def dodaj_do_ulubionych(self, ctx):
""" """
Generate a playlist in queue. First word in this command shall be int defining length of the playlist. Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
@@ -104,6 +107,7 @@ class RadioModule(commands.Cog):
description="Dodaje do listy ulubionych w radiu", description="Dodaje do listy ulubionych w radiu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def request_radio(self, ctx): async def request_radio(self, ctx):
""" """
Generate a playlist in queue. First word in this command shall be int defining length of the playlist. Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
@@ -138,6 +142,7 @@ class RadioModule(commands.Cog):
description="Dodaje do listy ulubionych w radiu", description="Dodaje do listy ulubionych w radiu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def stworz_audycje(self, ctx): async def stworz_audycje(self, ctx):
""" """
Generate a playlist in queue. First word in this command shall be int defining length of the playlist. Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
@@ -174,6 +179,7 @@ class RadioModule(commands.Cog):
description="Czysci liste ulubionych w radiu", description="Czysci liste ulubionych w radiu",
guild=discord.Object(id=664789470779932693), guild=discord.Object(id=664789470779932693),
) )
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
async def wyczysc_ulubione(self, ctx): async def wyczysc_ulubione(self, ctx):
""" """
Generate a playlist in queue. First word in this command shall be int defining length of the playlist. Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
+7 -1
View File
@@ -1,5 +1,11 @@
[ { [ {
"role": "system", "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." "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."
} },
{
"Polish Hammer" : [346956223645614080, "Conjurer", "Polish Hammer", "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.", ""],
"Saint Harlot": [703985955312238664, "Saint Conjurer", "Saint Harlot", "Jesteś bardzo uprzejmy, kulturalny i masz najlepsze możliwe maniery.", ""],
"Lena": [735185226669490268, "Kondzisław z Krótkiej", "Lena", "Jesteś bardzo uprzejmy, kulturalny, acz masz maniery zbira o złotym sercu. Dodatkowo twoja rozmówczyni Cię absolutnie przeraża.", ""],
"Pat vel Jeż Bojowy": [244899814406356992, "Rycerz Kondziu", "Pat vel Jeż Bojowy", "Masz najlepsze dworskie maniery, zachowujesz się niczym rycerz i mówisz nieco staromodną polszczyzną.", ""]
}
] ]
+13
View File
@@ -0,0 +1,13 @@
AsyncCursorPage[Message](
data=[Message(id='msg_3eWSdgbcU8sbCmJK2momOgQQ',
assistant_id='asst_06eZiwvYNK3MR34suFP60gvg',
attachments=[],
completed_at=None,
content=[TextContentBlock(text=Text(annotations=[], value='Cześć! Oto coś do przemyślenia: \n\n„Sukces to suma niewielkich wysiłków powtarzanych dzień po dniu.” — Robert Collier\n\nTo przypomina nam, że często to nie wielkie działania, ale konsekwentne, małe kroki prowadzą do osiągnięcia celu. Jak mogę Ci dzisiaj pomóc?'), type='text')], created_at=1731620112, incomplete_at=None, incomplete_details=None, metadata={}, object='thread.message', role='assistant', run_id='run_JGjWQTCEkDcEYpyCJnrkZU8Q', status=None, thread_id='thread_dDEjGbGm6ICfG75u0KKpoVxD'), Message(id='msg_GFcnfCFgAthGm2D3oE5d0ZkQ', assistant_id=None, attachments=[], completed_at=None, content=[TextContentBlock(text=Text(annotations=[], value='Cześć! Powiedz coś mądrego'), type='text')], created_at=1731620110, incomplete_at=None, incomplete_details=None, metadata={}, object='thread.message', role='user', run_id=None, status=None, thread_id='thread_dDEjGbGm6ICfG75u0KKpoVxD')], object='list', first_id='msg_3eWSdgbcU8sbCmJK2momOgQQ', last_id='msg_GFcnfCFgAthGm2D3oE5d0ZkQ', has_more=False)
[TextContentBlock(
text=Text(annotations=[],
value='Cześć! Oto coś do rozważenia: "Największą przeszkodą w naszym życiu jest brak odwagi do wprowadzenia zmian." Niezależnie od tego, jakie masz cele czy marzenia, odwaga do działania i przystosowania się do nowych sytuacji jest kluczem do osiągnięcia sukcesu. Jakie masz przemyślenia na ten temat?'),
type='text')
]
-3
View File
@@ -73,9 +73,6 @@ async def on_ready():
logger.info("ID:", client.user.id) logger.info("ID:", client.user.id)
# TODO: ADMINISTRATION
# *================================== Run # *================================== Run
if __name__ == "__main__": if __name__ == "__main__":
logger.info("Starting discord bot") logger.info("Starting discord bot")
+2
View File
@@ -161,6 +161,7 @@ class Transcriber(commands.Cog):
self.logger = logging.getLogger("discord") self.logger = logging.getLogger("discord")
@commands.hybrid_command(name="transcribe") @commands.hybrid_command(name="transcribe")
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def test(self, ctx): async def test(self, ctx):
if self.vc: if self.vc:
vc = self.vc # to juz powinien byc voice channel z funkcja conenct vc = self.vc # to juz powinien byc voice channel z funkcja conenct
@@ -231,6 +232,7 @@ class Transcriber(commands.Cog):
self.logger.debug("After %s", after) self.logger.debug("After %s", after)
@commands.command(name="stop_transcribe") @commands.command(name="stop_transcribe")
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
async def stop(self, ctx): async def stop(self, ctx):
self.check_data.stop() self.check_data.stop()
stop_token = CommunicationObject("STOP", None, None) stop_token = CommunicationObject("STOP", None, None)