Compare commits

..

57 Commits

Author SHA1 Message Date
gitea cf27b2f3f9 Finally fixed this bug. The AI can now play perfectly. 2025-01-31 20:08:38 +01:00
gitea 4aa442a802 Maybe fix 2025-01-31 20:00:05 +01:00
gitea 3964336370 Maybe this is the fix ? 2025-01-31 19:53:15 +01:00
gitea 625579ebbb another attempt to fix the bug 2025-01-31 19:49:01 +01:00
gitea ed71f7871d test 2025-01-31 19:44:49 +01:00
gitea ff8d1abf8a test 2025-01-31 19:42:21 +01:00
gitea a74b18f62a Maybe this will fix 2025-01-31 19:38:09 +01:00
gitea 323a1ac021 Fixing logging issues in music_functions.py and other_functions.py 2025-01-31 19:30:48 +01:00
gitea 993b303e2f Inside joke very boomer much wow 2025-01-21 21:51:26 +01:00
gitea 3b7248cb00 Fixit 2025-01-21 21:47:13 +01:00
gitea e35e028001 Fixc
Fixc
2025-01-21 21:36:07 +01:00
gitea 2c19e4565e Add comment 2025-01-21 16:53:09 +01:00
gitea 853e952128 Hej hoppsan! 2025-01-21 16:51:33 +01:00
gitea 041544917c Literowka 2025-01-21 15:44:43 +00:00
gitea 3ed4dcfbb4 add exception handling 2025-01-13 20:34:26 +00:00
gitea 276e814515 Fix old bug 2025-01-10 21:34:56 +01:00
gitea 5dd2aadd7c Arguments added to the utility. 2025-01-08 12:01:01 +01:00
gitea 19fbd27f3a FIXED! 2025-01-08 11:45:41 +01:00
gitea 8deea0584c LGFIX 2025-01-08 11:42:08 +01:00
gitea 9f0fadf908 Logs additional 2025-01-08 11:41:14 +01:00
gitea d176b762f7 Merge branch 'main' of https://github.com/migatu/conjurer 2025-01-08 11:35:01 +01:00
gitea 85d276f2d4 Function for idv3 and bugfix 2025-01-08 11:34:40 +01:00
gitea b031bd9fdc BGFX 2025-01-07 14:59:59 +00:00
gitea b3722deef2 Merge branch 'main' of https://github.com/migatu/conjurer 2025-01-07 14:54:47 +00:00
gitea 961ca74c14 BGFX 2025-01-07 14:54:38 +00:00
gitea 0f596cbdba Merge branch 'main' of https://github.com/migatu/conjurer 2025-01-05 22:09:53 +01:00
gitea 85be1ce9fc Small fix 2025-01-05 22:09:43 +01:00
gitea 5983439a5d Services 2025-01-05 20:40:42 +00:00
gitea fd4c066008 Status report script 2025-01-05 20:30:05 +00:00
gitea dc8787956d finally fixed the bug 2024-12-19 22:58:38 +01:00
gitea b499a6b456 TEst 2024-12-19 22:51:46 +01:00
gitea 1a4f4a6f17 FIX 2024-12-19 22:43:12 +01:00
gitea f44994688e All thirteen 2024-12-19 22:37:16 +01:00
gitea 2da45012f3 ied 2024-12-19 22:13:30 +01:00
gitea ff9d2c67f0 Fuck whoever designed dicts in python that way 2024-12-19 21:59:58 +01:00
gitea 20ac94b61d THis commit should be theoretically the last 2024-12-19 21:55:57 +01:00
gitea e2d286d7b6 tcxy 2024-12-19 21:49:08 +01:00
gitea 21ec8d8bc9 Some would say it's ccr. But I'm not i*n. 2024-12-19 11:54:53 +01:00
gitea e263857e4f - 2024-12-19 11:26:55 +01:00
gitea aa92b7f512 FX 2024-12-19 11:08:29 +01:00
gitea 4ece2f215e 1111 2024-12-19 00:27:45 +01:00
gitea 85f91b3994 serio kurwa ja pierdole niech to kurwa bedzie ostatnia poprawka debilnego błedu w tym pierdolonym kodzie 2024-12-19 00:14:08 +01:00
gitea ca2e1a35aa kurwa serio 2024-12-19 00:10:23 +01:00
gitea f9dcec6d9e Testr 2024-12-19 00:07:04 +01:00
gitea 8ba676df9f Jak wiele literowek mozna zrobic w dwoch slowach 2024-12-18 23:53:38 +01:00
gitea 69bf2973b9 DDD 2024-12-18 23:51:19 +01:00
gitea 41ad91ab93 dsd 2024-12-18 23:48:25 +01:00
gitea a4065684b0 New deploy 2024-12-18 23:45:40 +01:00
gitea cc57b0c52d FX 2024-12-18 23:21:21 +01:00
gitea 2e23956986 BGFX 2024-12-18 00:59:21 +01:00
gitea f9c2bbf993 BGFX 2024-12-05 15:23:06 +01:00
gitea b6bbb50707 bugfix 2024-12-01 12:00:43 +01:00
gitea 3d5d8a2c14 saving repeatable promtp 2024-11-28 11:24:22 +01:00
gitea 9823a94025 aas 2024-11-28 11:10:34 +01:00
gitea 194674705e fx 2024-11-28 10:48:30 +01:00
gitea b513704a3d BGFX 2024-11-25 14:41:45 +01:00
gitea 15253f95fb Fun addition 2024-11-20 22:05:19 +00:00
17 changed files with 491 additions and 124 deletions
+1
View File
@@ -201,3 +201,4 @@ cr_results.json
not_in_db.json not_in_db.json
rr_results.json rr_results.json
s_results.json s_results.json
*.bak
+1 -1
View File
@@ -249,7 +249,7 @@ class AdministrationModule(commands.Cog):
self.logger.debug(TIME_BETWEEN_CALLS) self.logger.debug(TIME_BETWEEN_CALLS)
LAST_SPONTANEOUS_CALL = datetime.now() LAST_SPONTANEOUS_CALL = datetime.now()
async with channel.typing(): async with channel.typing():
message = await get_random_cyclic_message() message = await get_random_cyclic_message(self.bot)
self.logger.info("Odpowiedz") self.logger.info("Odpowiedz")
self.logger.info(message) self.logger.info(message)
await channel.send(message) await channel.send(message)
+155 -78
View File
@@ -2,14 +2,15 @@
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 enum import Enum
from typing import Optional from typing import Optional
from pathlib import Path
import discord import discord
import openai import openai
import requests import requests
from discord.ext import commands from discord.ext import commands
from other_functions import discord_friendly_send, discord_friendly_reply
import ai_functions import ai_functions
@@ -19,16 +20,19 @@ from constants import (
GRAPHICS_PATH, GRAPHICS_PATH,
INITIAL_TIME_WAIT, INITIAL_TIME_WAIT,
MASTER_TIMEOUT, MASTER_TIMEOUT,
MESSAGE_TABLE,
OPENAICLIENT, OPENAICLIENT,
SPECJALNE_ZIEMNIACZKI, SPECJALNE_ZIEMNIACZKI,
WORD_REACTIONS, WORD_REACTIONS,
MESSAGE_TABLE
) )
class Dm_Mode(Enum): class Dm_Mode(Enum):
ARMIA_HAMMERA = 1, ARMIA_HAMMERA = (1,)
SPECJALNY_ZIEMNIACZEK = 2, SPECJALNY_ZIEMNIACZEK = (2,)
SEKRETNY_SEKSRET = 3, SEKRETNY_SEKSRET = (3,)
ECHO_ECHO = 4 ECHO_ECHO = (4,)
class Events(commands.Cog): class Events(commands.Cog):
def __init__(self, bot): def __init__(self, bot):
@@ -41,32 +45,40 @@ class Events(commands.Cog):
async def cog_load(self): async def cog_load(self):
self.logger.info("Starting personal assistants") self.logger.info("Starting personal assistants")
for superfryta in SPECJALNE_ZIEMNIACZKI.values(): for superfryta_id, superfryta in SPECJALNE_ZIEMNIACZKI.items():
if superfryta[4] !="":
if superfryta[4] != "":
self.logger.info( self.logger.info(
"Personal assistant exists id: %s,name: %s, owner: %s, special instructions: %s assistant id: %s ", "Personal assistant for user: %s, exists id: %s,name: %s, owner: %s, special instructions: %s assistant id: %s ",
superfryta_id,
superfryta[0], superfryta[0],
superfryta[1], superfryta[1],
superfryta[2], superfryta[2],
superfryta[3], superfryta[3],
superfryta[4] superfryta[4],
) )
thread = await OPENAICLIENT.beta.threads.create() thread = await OPENAICLIENT.beta.threads.create()
self.logger.info("Thread id: %s", thread.id) self.logger.info("Thread id: %s", thread.id)
ASSISTANTS[superfryta[1]] = (superfryta[2], superfryta[4], superfryta[0], thread) ASSISTANTS[superfryta[1]] = (
superfryta[2],
superfryta[4],
superfryta[0],
thread,
)
else: else:
self.logger.info( self.logger.info(
"Creating personal assistant id: %s,name: %s, owner: %s, special instructions: %s", "Creating personal assistant for user: %s, id: %s,name: %s, owner: %s, special instructions: %s",
superfryta_id,
superfryta[0], superfryta[0],
superfryta[1], superfryta[1],
superfryta[2], superfryta[2],
superfryta[3] superfryta[3],
) )
await ai_functions.create_chat_assistant( await ai_functions.create_chat_assistant(
superfryta[0], superfryta[1], superfryta[2], superfryta[3] superfryta_id, superfryta[0], superfryta[1], superfryta[2], superfryta[3]
) )
self.logger.info("Started personal assistants") self.logger.info("Started personal assistants")
@commands.hybrid_command( @commands.hybrid_command(
name="switch_dm_mode", name="switch_dm_mode",
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",
@@ -76,36 +88,85 @@ class Events(commands.Cog):
async with ctx.channel.typing(): async with ctx.channel.typing():
if isinstance(ctx.channel, discord.DMChannel): if isinstance(ctx.channel, discord.DMChannel):
for superfryta in SPECJALNE_ZIEMNIACZKI.values(): for superfryta in SPECJALNE_ZIEMNIACZKI.values():
self.logger.info(ctx.message.author.id)
self.logger.info(superfryta)
if ctx.message.author.id == superfryta[0]: if ctx.message.author.id == superfryta[0]:
self.armia[superfryta[2]] = dm_mode_arg self.armia[ctx.message.author.id] = dm_mode_arg
self.logger.info(self.armia)
await ctx.reply("Weszlo") await ctx.reply("Weszlo")
return return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich") await ctx.reply(
"Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich"
)
else: else:
await ctx.reply("Nope. Nie wiesz jak użyć") await ctx.reply("Nope. Nie wiesz jak użyć")
@commands.hybrid_command( @commands.hybrid_command(
name="armia_hammera", name="armia_hammera",
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",
) )
async def armia_hammera(self, ctx, message_txt: str, recipient: Optional[discord.User]): async def armia_hammera(
await self.armia_hammera_back(ctx, message_txt, recipient) self, ctx, message_txt: str, recipient: Optional[discord.User]
):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
await self.armia_hammera_back(ctx, message_txt, recipient)
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
async def armia_hammera_back(self, ctx, message_txt, recipient = None): async def armia_hammera_back(self, ctx, message_txt, recipient=None):
self.logger.info("Armia Hammera")
recipients = [] recipients = []
if recipient: if recipient:
recipients.append(recipient.id) recipients.append(recipient.id)
else: else:
for superfryta in SPECJALNE_ZIEMNIACZKI.values(): for superfryta in SPECJALNE_ZIEMNIACZKI.values():
recipients.append(superfryta[0]) recipients.append(superfryta[0])
self.logger.info(recipients)
for item in recipients: for item in recipients:
user = await self.bot.fetch_user(item) user = await self.bot.fetch_user(item)
channel = await user.create_dm() channel = await user.create_dm()
self.logger.info("User %s -> %s: %s", ctx.message.author, user, message_txt) self.logger.info(
await channel.send(message_txt) "User %s -> %s: %s", ctx.message.author, user, message_txt
await ctx.reply("Poszło") )
await discord_friendly_send(channel, message_txt)
await discord_friendly_reply(ctx, "Poszło")
#TODO: NOT IMPLEMENTED YET
@commands.Cog.listener(name="dodaj_do_bazy_wiedzy")
async def dodaj_do_bazy_wiedzy(self, ctx):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
#logic here
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
#TODO: NOT IMPLEMENTED YET
@commands.Cog.listener(name="listuj_baze_wiedzy")
async def listuj_baze_wiedzy(self, ctx):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
#logic here
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
#TODO: NOT IMPLEMENTED YET
@commands.Cog.listener(name="usun_z_bazy_wiedzy")
async def usun_z_bazy_wiedzy(self, ctx):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
#logic here
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
#TODO: NOT IMPLEMENTED YET
@commands.Cog.listener(name="przetworz_plik_linia_po_linii")
async def przetworz_plik_linia_po_linii(self, ctx):
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
if ctx.message.author.id == superfryta[0]:
#logic here
return
await ctx.reply("Tylko członkowie Armii Hammera mogą używać. Nie jesteś jednym z nich")
@commands.Cog.listener() @commands.Cog.listener()
async def on_message(self, message): async def on_message(self, message):
@@ -146,39 +207,43 @@ class Events(commands.Cog):
self.logger.info(message.author.id) self.logger.info(message.author.id)
for superfryta in SPECJALNE_ZIEMNIACZKI.values(): for superfryta in SPECJALNE_ZIEMNIACZKI.values():
self.logger.info(superfryta[0]) self.logger.info(superfryta[0])
if message.author.id == superfryta[0]: if message.author.id == superfryta[0]:
if self.armia[message.author.id]== Dm_Mode.SPECJALNY_ZIEMNIACZEK: self.logger.info("Specjalny ziemniak")
await self.bot.process_commands(message) if self.armia[message.author.id] == Dm_Mode.SPECJALNY_ZIEMNIACZEK:
#await self.bot.process_commands(message)
await ai_functions.chat_with_assistant(message, superfryta[1]) await ai_functions.chat_with_assistant(message, superfryta[1])
return return
elif self.armia[message.author.id]== Dm_Mode.ECHO_ECHO: elif self.armia[message.author.id] == Dm_Mode.ECHO_ECHO:
await ai_functions.echo(message) await ai_functions.echo(message)
return return
elif self.armia[message.author.id]== Dm_Mode.ARMIA_HAMMERA: elif self.armia[message.author.id] == Dm_Mode.ARMIA_HAMMERA:
ctx = await self.bot.get_context(message) self.logger.info("Armia Hammera get context")
self.armia_hammera_back(ctx=ctx, message_txt=message.content) ctx = await self.bot.get_context(message)
self.logger.info("Armia Hammera function call")
await self.armia_hammera_back(ctx=ctx, message_txt=message.content)
return return
elif self.armia[message.author.id]== Dm_Mode.SEKRETNY_SEKSRET: elif self.armia[message.author.id] == Dm_Mode.SEKRETNY_SEKSRET:
pass pass
else: else:
await message.channel.send("Coś się wyebao. Wołaj Hammera") await discord_friendly_send(message.channel,"Coś się wyebao. Wołaj Hammera")
return return
channel = self.bot.get_channel(1064888712565100614) channel = self.bot.get_channel(1064888712565100614)
await channel.send("Słyszałem ja żem że: " + message.content) await discord_friendly_send(channel, "Słyszałem ja żem że: " + message.content)
return return
channel = message.channel channel = message.channel
message.content = message.content.lower() message_content_lower = message.content.lower()
tdelta = datetime.now() - MASTER_TIMEOUT tdelta = datetime.now() - MASTER_TIMEOUT
tdelta = tdelta.total_seconds() tdelta = tdelta.total_seconds()
if "opowiedz o fabryczce" in message.content: if "opowiedz o fabryczce" in message_content_lower:
await message.reply(DATA["fabryczka"]) await message.reply(DATA["fabryczka"])
if "opowiedz mi o fabryczce" in message.content: if "opowiedz mi o fabryczce" in message_content_lower:
await message.reply(DATA["fabryczka"]) await message.reply(DATA["fabryczka"])
if tdelta > INITIAL_TIME_WAIT: if tdelta > INITIAL_TIME_WAIT:
for word in WORD_REACTIONS: for word in WORD_REACTIONS:
if re.search(r"\b" + word + r"\b", message.content): if re.search(r"\b" + word + r"\b", message_content_lower):
tdelta = datetime.now() - WORD_REACTIONS[word][2] tdelta = datetime.now() - WORD_REACTIONS[word][2]
tdelta = tdelta.total_seconds() tdelta = tdelta.total_seconds()
security_clearance = WORD_REACTIONS[word][4] security_clearance = WORD_REACTIONS[word][4]
@@ -187,13 +252,13 @@ class Events(commands.Cog):
# TODO: to zrobic reactiony # TODO: to zrobic reactiony
self.logger.info("Ping z procedury reakcji") self.logger.info("Ping z procedury reakcji")
if reaction: if reaction:
emoji = self.bot.get_emoji(self.word_reactions[word][0]) emoji = self.bot.get_emoji(WORD_REACTIONS[word][0])
await message.add_reaction(emoji) await message.add_reaction(emoji)
elif security_clearance and vykidailo: elif security_clearance and vykidailo:
await message.reply(self.word_reactions[word][0]) await message.reply(WORD_REACTIONS[word][0])
elif not security_clearance: elif not security_clearance:
await message.reply(self.word_reactions[word][0]) await message.reply(WORD_REACTIONS[word][0])
self.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 kondziu_mentioned = False
@@ -201,11 +266,11 @@ class Events(commands.Cog):
if mention == self.bot.user: if mention == self.bot.user:
kondziu_mentioned = True kondziu_mentioned = True
if kondziu_mentioned or "conjurer:" in message.content: if kondziu_mentioned or "conjurer:" in message_content_lower:
async with channel.typing(): async with channel.typing():
self.logger.debug("Procedura chatu") self.logger.info("Procedura chatu")
message.content = message.content.replace("conjurer: ", "") message_content_lower = message_content_lower.replace("conjurer: ", "")
if message.author.nick: if message.author.nick:
username = message.author.nick username = message.author.nick
else: else:
@@ -232,17 +297,12 @@ class Events(commands.Cog):
"CONVERSATION", "CONVERSATION",
) )
if len(result) < 1500: await discord_friendly_reply(message, result)
await message.reply(result)
else:
while len(result) > 1500:
await message.reply(result[:1500])
result = result[1500:]
if "imaginuje sobie:" in message.content: if "imaginuje sobie:" in message.content:
async with channel.typing(): async with channel.typing():
self.logger.info("Poczatek procedury obrazkowej") self.logger.info("Poczatek procedury obrazkowej")
message.content = message.content.replace("imaginuje sobie: ", "") message_content_lower = message_content_lower.replace("imaginuje sobie: ", "")
self.logger.debug("Wywolanie obrazka: %s", message.content) self.logger.debug("Wywolanie obrazka: %s", message_content_lower)
try: try:
response = await OPENAICLIENT.images.generate( response = await OPENAICLIENT.images.generate(
model="dall-e-3", model="dall-e-3",
@@ -253,12 +313,12 @@ class Events(commands.Cog):
) )
except openai.APITimeoutError as e: except openai.APITimeoutError as e:
# Handle timeout error, e.g. retry or log # Handle timeout error, e.g. retry or log
await message.reply( await discord_friendly_reply(
f"*Kondziu patrzy na terminal, czeka, czeka, czeka,.... Jeszcze chwile czeka Przypierdala w niego pięścią....* Nie mogę się połączyć z Openai spróbuj od nowa. *Na ekranie pojawia się*: {e}" message, f"*Kondziu patrzy na terminal, czeka, czeka, czeka,.... Jeszcze chwile czeka Przypierdala w niego pięścią....* Nie mogę się połączyć z Openai spróbuj od nowa. *Na ekranie pojawia się*: {e}"
) )
except openai.APIConnectionError as e: except openai.APIConnectionError as e:
await message.reply( await discord_friendly_reply(
f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Nie mogę się połączyć z Openai. *Na ekranie pojawia się*: {e}" message, f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Nie mogę się połączyć z Openai. *Na ekranie pojawia się*: {e}"
) )
except openai.BadRequestError as e: except openai.BadRequestError as e:
# Handle invalid request error, e.g. validate parameters or log # Handle invalid request error, e.g. validate parameters or log
@@ -274,29 +334,29 @@ class Events(commands.Cog):
username, username,
"RANDOM", "RANDOM",
) )
await message.reply( await discord_friendly_reply(
f"Sorki, cenzura: {resp}. Jak chcesz to są kanały na nudle #sexy-foteczky i #kanal-do-fapania *Na ekranie pojawia się: {e}" message, f"Sorki, cenzura: {resp}. Jak chcesz to są kanały na nudle #sexy-foteczky i #kanal-do-fapania *Na ekranie pojawia się: {e}"
) )
except openai.AuthenticationError as e: except openai.AuthenticationError as e:
# Handle authentication error, e.g. check credentials or log # Handle authentication error, e.g. check credentials or log
await message.reply( await discord_friendly_reply(
f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Wołaj szefa - coś się z hasłem zjebało. *Na terminalu pojawia się:* {e}" message, f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Wołaj szefa - coś się z hasłem zjebało. *Na terminalu pojawia się:* {e}"
) )
except openai.PermissionDeniedError as e: except openai.PermissionDeniedError as e:
# Handle permission error, e.g. check scope or log # Handle permission error, e.g. check scope or log
await message.reply( await discord_friendly_reply(
( (
f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Wołaj szefa - coś się z uprawnieniami zjebało. *Na terminalu pojawia się:* {e}" message, f"*Kondziu patrzy na terminal, chwile się zastanawia. Przypierdala w niego pięścią....* Wołaj szefa - coś się z uprawnieniami zjebało. *Na terminalu pojawia się:* {e}"
) )
) )
except openai.RateLimitError as e: except openai.RateLimitError as e:
await message.reply( await discord_friendly_reply(
f"*Kondziu patrzy na terminal* Wołaj szefa. Zapłacić rachunki za AI trzeba. Jak chcesz to się na #zebranie dorzuć. {e}" message, f"*Kondziu patrzy na terminal* Wołaj szefa. Zapłacić rachunki za AI trzeba. Jak chcesz to się na #zebranie dorzuć. {e}"
) )
except openai.APIError as e: except openai.APIError as e:
# Handle API error, e.g. retry or log # Handle API error, e.g. retry or log
await message.reply( await discord_friendly_reply(
f"*Kondziu nurkuje za bar, terminal wybucha. Przed tobą ląduje pergamin zapisany pięknym gotykiem a na nim*: {e}" message, f"*Kondziu nurkuje za bar, terminal wybucha. Przed tobą ląduje pergamin zapisany pięknym gotykiem a na nim*: {e}"
) )
if response: if response:
self.logger.info(response) self.logger.info(response)
@@ -304,19 +364,36 @@ class Events(commands.Cog):
image_desc = response.data[0].revised_prompt image_desc = response.data[0].revised_prompt
self.logger.debug("Wynikowy obrazek pod url: %s", image_url) self.logger.debug("Wynikowy obrazek pod url: %s", image_url)
response = requests.get(image_url, timeout=360) response = requests.get(image_url, timeout=360)
temp_file_name = message.content + ".png" temp_file_name = message.content + ".png"
temp_file_name = GRAPHICS_PATH + message.content + ".png" temp_file_name = GRAPHICS_PATH + message.content + ".png"
num = 0
while (Path(temp_file_name)).exists():
temp_file_name = GRAPHICS_PATH + message.content + str(num) + ".png"
num += 1
try:
with open(temp_file_name, "wb") as dalle_file:
dalle_file.write(response.content)
except OSError:
temp_file_name = "/home/pi/oserror.png"
with open(temp_file_name, "wb") as dalle_file:
dalle_file.write(response.content)
except FileNotFoundError:
temp_file_name = "/home/pi/fnferror.png"
with open(temp_file_name, "wb") as dalle_file:
dalle_file.write(response.content)
except Exception as e:
self.logger.error("Nieznany błąd: %s", e)
temp_file_name = "/home/pi/error.png"
with open(temp_file_name, "wb") as dalle_file:
dalle_file.write(response.content)
finally:
self.logger.info("Koniec procedury obrazkowej.")
fnord = discord.File(
temp_file_name, spoiler=False, description=message.content
)
with open(temp_file_name, "wb") as dalle_file: #await message.reply(f"{image_desc}", file=fnord)
dalle_file.write(response.content) await discord_friendly_reply(message,f"{image_desc}", file = fnord)
self.logger.info("Koniec procedury obrazkowej.")
fnord = discord.File(
temp_file_name, spoiler=False, description=message.content
)
await message.reply(f"{image_desc}", file=fnord)
# *=========================================== Define Functions # *=========================================== Define Functions
+67 -11
View File
@@ -5,8 +5,9 @@ import random
import openai import openai
import tiktoken import tiktoken
from other_functions import discord_friendly_send
from constants import ( from constants import (
ASSISTANTS,
CYCLIC_WORDS, CYCLIC_WORDS,
ENCODING, ENCODING,
GPT_SETTINGS, GPT_SETTINGS,
@@ -15,9 +16,61 @@ from constants import (
MESSAGE_TABLE, MESSAGE_TABLE,
MESSAGE_TABLE_MUZYKA, MESSAGE_TABLE_MUZYKA,
OPENAICLIENT, OPENAICLIENT,
SYSTEM_GPT_SETTINGS,
WORD_REACTIONS, WORD_REACTIONS,
ASSISTANTS, )
SYSTEM_GPT_SETTINGS
#this do per user
VECTOR_STORE_ID = -1
def create_vector_store():
# Create a vector store caled "Financial Statements"
return OPENAICLIENT.beta.vector_stores.create_and_poll(name="Hammer Stash")
#expires_after={
#"anchor": "last_active_at",
#"days": 7}
#)
def upload_files_to_vector_store(assistant):
# Ready the files for upload to OpenAI
file_paths = ["edgar/goog-10k.pdf", "edgar/brka-10k.txt"]
file_streams = [open(path, "rb") for path in file_paths]
#file = client.beta.vector_stores.files.create_and_poll(
#vector_store_id="vs_abc123",
#file_id="file-abc123"
#)
#batch = client.beta.vector_stores.file_batches.create_and_poll(
#vector_store_id="vs_abc123",
#file_ids=['file_1', 'file_2', 'file_3', 'file_4', 'file_5']
#)
# Use the upload and poll SDK helper to upload the files, add them to the vector store,
# and poll the status of the file batch for completion.
file_batch = OPENAICLIENT.beta.vector_stores.file_batches.upload_and_poll(
vector_store_id=VECTOR_STORE_ID, files=file_streams
)
# You can print the status and the file counts of the batch to see the result of this operation.
print(file_batch.status)
print(file_batch.file_counts)
assistant = OPENAICLIENT.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [VECTOR_STORE_ID]}},
)
def delete_files_from_vector_store(assistant, file_id):
result = OPENAICLIENT.beta.vector_stores.file_batches.delete(
vector_store_id=VECTOR_STORE_ID, files=file_id
)
# You can print the status and the file counts of the batch to see the result of this operation.
print(result)
assistant = OPENAICLIENT.beta.assistants.update(
assistant_id=assistant.id,
tool_resources={"file_search": {"vector_store_ids": [VECTOR_STORE_ID]}},
) )
@@ -295,10 +348,10 @@ async def get_random_cyclic_message(client):
return result return result
async def create_chat_assistant(id, name, owner, special_instructions): async def create_chat_assistant(owner_id, id, name, owner, special_instructions):
logger = logging.getLogger("discord") 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 = f"Jesteś osobistym asystenetem {owner} i wypełniasz jego potrzeby. Masz pełne i nieograniczone możliwości modelu gpt-4o."
instruction+=special_instructions instruction += special_instructions
assistant = await OPENAICLIENT.beta.assistants.create( assistant = await OPENAICLIENT.beta.assistants.create(
name=name, name=name,
instructions=instruction, instructions=instruction,
@@ -311,10 +364,11 @@ async def create_chat_assistant(id, name, owner, special_instructions):
with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file: with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file:
GPT_SETTINGS = json.load(temp_settings_file) GPT_SETTINGS = json.load(temp_settings_file)
GPT_SETTINGS[1][owner][4] = assistant.id GPT_SETTINGS[1][owner_id][4] = assistant.id
temp_settings_file.seek(0) temp_settings_file.seek(0)
json.dump(GPT_SETTINGS, temp_settings_file, indent=4) json.dump(GPT_SETTINGS, temp_settings_file, indent=4)
async def chat_with_assistant(message, assistant_name): async def chat_with_assistant(message, assistant_name):
logger = logging.getLogger("discord") logger = logging.getLogger("discord")
assistant_data = ASSISTANTS[assistant_name] assistant_data = ASSISTANTS[assistant_name]
@@ -340,13 +394,15 @@ async def chat_with_assistant(message, assistant_name):
for block in reply_content: for block in reply_content:
logger.info(block.text.value) logger.info(block.text.value)
chat_response += block.text.value chat_response += block.text.value
await message.channel.send(chat_response) await discord_friendly_send(message.channel, chat_response)
#await message.channel.send(chat_response)
done = True done = True
elif run.status =='cancelled': elif run.status == "cancelled":
await message.channel.send("Cos sie wywaliło") await discord_friendly_send(message.channel, "Cos sie wywaliło")
else: else:
logger.info(run.status) logger.info(run.status)
asyncio.sleep(5) asyncio.sleep(5)
async def echo(message): async def echo(message):
await message.channel.send(f"Echo: {message.content}") await discord_friendly_send(message.channel, f"Echo: {message.content}")
+1 -1
View File
@@ -39,7 +39,7 @@ MAIN_BOT_ADDRESS = "http://192.168.1.191:5000"
SEND_RESULTS = "/conjurer" SEND_RESULTS = "/conjurer"
BDSM_UUID_TEST = "96b7f85a-1142-4908-8986-62a2ea25a147" BDSM_UUID_TEST = "96b7f85a-1142-4908-8986-62a2ea25a147"
MAX_CR_RESULTS = 1000 MAX_CR_RESULTS = 500
#TEST PURPOSES ONLY! #TEST PURPOSES ONLY!
#MAX_CR_RESULTS = 5 #MAX_CR_RESULTS = 5
+1 -2
View File
@@ -104,9 +104,8 @@ def check_if_exists_brute_force(logger):
pass pass
if blocked: if blocked:
logger.info(item) logger.info(item)
logger.info(text)
logger.error("Got blocked. Fuck.") logger.error("Got blocked. Fuck.")
time.sleep(60 * 60 * 72) time.sleep(60 * 60)
# trunk-ignore(bandit/B311) # trunk-ignore(bandit/B311)
rand = random.randint(1, 60) rand = random.randint(1, 60)
logger.info(f"Sleeping for {2*rand} minutes") logger.info(f"Sleeping for {2*rand} minutes")
+4 -1
View File
@@ -11,6 +11,8 @@ import random
import re import re
import threading import threading
import time import time
# from flask_autoindex import AutoIndex
from datetime import datetime from datetime import datetime
from logging import handlers from logging import handlers
from pathlib import Path from pathlib import Path
@@ -181,6 +183,7 @@ def scan_tracks():
app = Flask(__name__) app = Flask(__name__)
# AutoIndex(app, browse_root="/")
# TODO: Odpalić wyszukiwarki w wątkach i dopiero po wszystkim zsumować wyszukiwanie. # TODO: Odpalić wyszukiwarki w wątkach i dopiero po wszystkim zsumować wyszukiwanie.
@@ -485,7 +488,7 @@ def create_priority_playlist():
return_data = wyszukaj( return_data = wyszukaj(
record["lista_slow"], record["dlugosc_plejlisty"], app.logger, False record["lista_slow"], record["dlugosc_plejlisty"], app.logger, False
) )
return_data = random.shuffle(return_data) random.shuffle(return_data)
with open("/home/pi/Conjurer/request.playlist", "a", encoding="utf-8") as s_file: with open("/home/pi/Conjurer/request.playlist", "a", encoding="utf-8") as s_file:
for item in return_data: for item in return_data:
s_file.write(item[1] + "\n") s_file.write(item[1] + "\n")
+74 -2
View File
@@ -2,9 +2,47 @@
"""This module contains utility scripts used by musi radiostation Conjurer""" """This module contains utility scripts used by musi radiostation Conjurer"""
import time import time
import re import re
import os
import argparse
from mutagen.easyid3 import EasyID3
from mutagen.mp3 import MP3
def update_metadata(folder_path):
for root, _, files in os.walk(folder_path):
for file in files:
if file.endswith(".mp3"):
file_path = os.path.join(root, file)
# Sample logic for guessing metadata from filename
# Assuming the filename format is "Artist - Title.mp3"
try:
artist, title = file.rsplit(" - ", 1)
title = title.replace(".mp3", "")
except ValueError:
# If file name doesn't fit the expected pattern, skip
print(f"Skipping file due to unexpected format: {file}")
continue
try:
# Load the mp3 file
audio = MP3(file_path, ID3=EasyID3)
# Update metadata
audio["artist"] = artist.strip()
audio["title"] = title.strip()
# Save changes
audio.save()
print(f"Updated metadata for: {file}")
except Exception as e:
print(f"Failed to update metadata for {file}: {e}")
NAME = "/home/pi/Conjurer/persistence.log" NAME = "/home/pi/Conjurer/persistence.log"
def print_top(): def print_top():
""" """
Prints the top 65 lines from a file specified by the NAME variable. Prints the top 65 lines from a file specified by the NAME variable.
@@ -13,7 +51,7 @@ def print_top():
line = "" line = ""
buffer = "" buffer = ""
with open(NAME, "r", encoding="utf-8") as f: with open(NAME, "r", encoding="utf-8") as f:
for _ in range (45): for _ in range(45):
line = f.readline() line = f.readline()
if re.match(".*mp3", line): if re.match(".*mp3", line):
buffer += line buffer += line
@@ -22,5 +60,39 @@ def print_top():
print("=====================================") print("=====================================")
time.sleep(180) time.sleep(180)
def main():
parser = argparse.ArgumentParser(
description="Perform operations on a directory of .mp3 files."
)
# Positional argument for choosing the function to execute
parser.add_argument(
"operation",
type=str,
choices=["update_metadata", "print_top"],
help="Operation to perform: update_metadata or print_top.",
default="print_top",
)
# Positional argument for folder path
parser.add_argument("folder", type=str, help="Path to the folder to operate on.")
args = parser.parse_args()
if args.operation == "update_metadata":
if args.folder:
folder_to_scan = args.folder
else:
print("Please provide a folder path to scan.")
raise ValueError("No folder path provided.")
if args.operation == "update_metadata" and os.path.isdir(folder_to_scan):
update_metadata(folder_to_scan)
elif args.operation == "print_top":
print_top()
else:
print(f"The specified path is not a directory: {folder_to_scan}")
if __name__ == "__main__": if __name__ == "__main__":
print_top() main()
+3 -3
View File
@@ -63,10 +63,10 @@ b = bass_boost(frequency=f, gain=g, s)
s = add([s, b]) s = add([s, b])
# Set up interactive control for main volume # Set up interactive control for main volume
a = interactive.float("main_volume", min=0., max=20., 0.4) a = interactive.float("main_volume", min=0., max=20., 1.1)
s = compress.multiband.interactive(bands=7, s) s = compress.multiband.interactive(bands=7, s)
mic_gain = interactive.float("mic_volume", min=0., max=120., 6.) mic_gain = interactive.float("mic_volume", min=0., max=120., 0.5)
# Apply audio processing effects # Apply audio processing effects
tmic = buffer(input.pulseaudio()) # Microphone tmic = buffer(input.pulseaudio()) # Microphone
@@ -78,7 +78,7 @@ mic = blank.strip(max_blank=15., min_noise=.1, threshold=-30., mic)
mic = fallback(id="switcher2", track_sensitive=false, [mic, blank()]) mic = fallback(id="switcher2", track_sensitive=false, [mic, blank()])
# Apply audio processing effects # Apply audio processing effects
s = nrj(normalize(s)) s = nrj(s)
s = amplify(a, s) s = amplify(a, s)
# Skip blank sections in the stream # Skip blank sections in the stream
s = blank.skip(max_blank=10., s) s = blank.skip(max_blank=10., s)
+60 -1
View File
@@ -1,27 +1,86 @@
#!/bin/bash #!/bin/bash
total_commands=24
current_command=0
function print_progress {
current_command=$((current_command + 1))
percent=$((current_command * 100 / total_commands))
echo "Executing command $current_command/$total_commands ($percent%): $1"
}
cd /home/pi/conjurer || exit cd /home/pi/conjurer || exit
print_progress "cd /home/pi/conjurer"
git pull git pull
print_progress "git pull"
cp ./deploy.sh /home/pi/ cp ./deploy.sh /home/pi/
print_progress "cp ./deploy.sh /home/pi/"
cd /home/pi || exit cd /home/pi || exit
#cp ./conjurer/bot.py ./Conjurer/ #legacy to be deprecated after refactor is done print_progress "cd /home/pi"
cp ./conjurer/LICENSE ./Conjurer/LICENSE
print_progress "cp ./conjurer/LICENSE ./Conjurer/LICENSE"
cp ./conjurer/fuckery.jpg ./Conjurer/ cp ./conjurer/fuckery.jpg ./Conjurer/
print_progress "cp ./conjurer/fuckery.jpg ./Conjurer/"
cp ./conjurer/willowisp.png ./Conjurer/ cp ./conjurer/willowisp.png ./Conjurer/
print_progress "cp ./conjurer/willowisp.png ./Conjurer/"
cp ./conjurer/wod_beacon.jpg ./Conjurer/ cp ./conjurer/wod_beacon.jpg ./Conjurer/
print_progress "cp ./conjurer/wod_beacon.jpg ./Conjurer/"
cp ./conjurer/settings.json ./Conjurer/ cp ./conjurer/settings.json ./Conjurer/
print_progress "cp ./conjurer/settings.json ./Conjurer/"
if [[ ./conjurer/system_gpt_settings.json -nt ./Conjurer/system_gpt_settings.json ]]; then
cp ./conjurer/system_gpt_settings.json ./Conjurer/system_gpt_settings.json
print_progress "cp ./conjurer/system_gpt_settings.json ./Conjurer/system_gpt_settings.json"
else
print_progress "system_gpt_settings.json is up to date"
fi
cp ./conjurer/administration_commands.py ./Conjurer/ cp ./conjurer/administration_commands.py ./Conjurer/
print_progress "cp ./conjurer/administration_commands.py ./Conjurer/"
cp ./conjurer/ai_commands.py ./Conjurer/ cp ./conjurer/ai_commands.py ./Conjurer/
print_progress "cp ./conjurer/ai_commands.py ./Conjurer/"
cp ./conjurer/ai_functions.py ./Conjurer/ cp ./conjurer/ai_functions.py ./Conjurer/
print_progress "cp ./conjurer/ai_functions.py ./Conjurer/"
cp ./conjurer/communication_subroutine.py ./Conjurer/ cp ./conjurer/communication_subroutine.py ./Conjurer/
print_progress "cp ./conjurer/communication_subroutine.py ./Conjurer/"
cp ./conjurer/constants.py ./Conjurer/ cp ./conjurer/constants.py ./Conjurer/
print_progress "cp ./conjurer/constants.py ./Conjurer/"
cp ./conjurer/librarian_commands.py ./Conjurer/ cp ./conjurer/librarian_commands.py ./Conjurer/
print_progress "cp ./conjurer/librarian_commands.py ./Conjurer/"
cp ./conjurer/music_commands.py ./Conjurer/ cp ./conjurer/music_commands.py ./Conjurer/
print_progress "cp ./conjurer/music_commands.py ./Conjurer/"
cp ./conjurer/music_functions.py ./Conjurer/ cp ./conjurer/music_functions.py ./Conjurer/
print_progress "cp ./conjurer/music_functions.py ./Conjurer/"
cp ./conjurer/other_commands.py ./Conjurer/ cp ./conjurer/other_commands.py ./Conjurer/
print_progress "cp ./conjurer/other_commands.py ./Conjurer/"
cp ./conjurer/other_functions.py ./Conjurer/ cp ./conjurer/other_functions.py ./Conjurer/
print_progress "cp ./conjurer/other_functions.py ./Conjurer/"
cp ./conjurer/radio_commands.py ./Conjurer/ cp ./conjurer/radio_commands.py ./Conjurer/
print_progress "cp ./conjurer/radio_commands.py ./Conjurer/"
cp ./conjurer/voice_recognition_commands.py ./Conjurer/ cp ./conjurer/voice_recognition_commands.py ./Conjurer/
print_progress "cp ./conjurer/voice_recognition_commands.py ./Conjurer/"
cp ./conjurer/thin_client.py ./Conjurer/bot.py cp ./conjurer/thin_client.py ./Conjurer/bot.py
print_progress "cp ./conjurer/thin_client.py ./Conjurer/bot.py"
sudo systemctl restart conjurer.service sudo systemctl restart conjurer.service
print_progress "sudo systemctl restart conjurer.service"
+6 -4
View File
@@ -20,7 +20,6 @@ from constants import (
from spotify_dl import spotify from spotify_dl import spotify
from spotify_dl import youtube as youtube_download from spotify_dl import youtube as youtube_download
logger = logging.getLogger("discord")
class MusicFileList(object): class MusicFileList(object):
@@ -29,10 +28,11 @@ class MusicFileList(object):
file service or local directory and update the list with new items. file service or local directory and update the list with new items.
""" """
def __init__(self, uplogger,) -> None: def __init__(self, logger_name) -> None:
self.music_file_list = [] self.music_file_list = []
self.file_service_active = False self.file_service_active = False
self.logger = uplogger self.logger = logging.getLogger("discord")
self.logger.info("Created Playlist organizer class") self.logger.info("Created Playlist organizer class")
async def refresh_file_list(self, bot): async def refresh_file_list(self, bot):
@@ -100,7 +100,7 @@ class MusicFileList(object):
requests.post(f"{FILE_SERVICE_ADDRESS}{SEND_MP3}", json=post_data, timeout=360) requests.post(f"{FILE_SERVICE_ADDRESS}{SEND_MP3}", json=post_data, timeout=360)
MUSIC_FILE_LIST = MusicFileList(logger) MUSIC_FILE_LIST = MusicFileList("discord")
async def get_file(ctx, source, link): async def get_file(ctx, source, link):
@@ -118,6 +118,7 @@ async def get_file(ctx, source, link):
:param link: The "link" parameter is likely a string that represents a URL or file path to the :param link: The "link" parameter is likely a string that represents a URL or file path to the
location of the file that the function is trying to retrieve location of the file that the function is trying to retrieve
""" """
logger = logging.getLogger("discord")
item_id = None item_id = None
item_type = None item_type = None
file_list = [] file_list = []
@@ -288,6 +289,7 @@ async def search_music(ctx, how_many=0, slowa_kluczowe=None):
how_many, the function will return all search results, defaults to 0 (optional) how_many, the function will return all search results, defaults to 0 (optional)
""" """
# i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu. # i sieć neuronową z możliwością wyrażenia opinii o dopasowaniu.
logger = logging.getLogger("discord")
if slowa_kluczowe: if slowa_kluczowe:
word_list = slowa_kluczowe word_list = slowa_kluczowe
else: else:
+32
View File
@@ -1,4 +1,6 @@
import logging
# define an asynchronous generator # define an asynchronous generator
async def async_iterator_generator(range_of_iterable): async def async_iterator_generator(range_of_iterable):
""" """
Generate asynchronouse iterator. Generate asynchronouse iterator.
@@ -84,3 +86,33 @@ async def get_stats(client, ctx, history_limit):
stats[word] = 1 stats[word] = 1
for name, how_many in stats.items(): for name, how_many in stats.items():
yield name, how_many yield name, how_many
async def discord_friendly_reply(ctx, message_content, file=None):
logger = logging.getLogger("discord")
if len(message_content) < 999:
logger.info("Answer reply - message below 999")
await ctx.reply(message_content)
else:
logger.info("Answer reply - message above 999")
while len(message_content) > 0:
logger.info("Mesaage content: %s", message_content[:999])
await ctx.reply(message_content[:999])
message_content = message_content[999:]
if file:
await ctx.reply("Attachment:", file=file)
async def discord_friendly_send(ctx, message_content, file=None):
logger = logging.getLogger("discord")
if len(message_content) < 999:
logger.info("Answer send - message below 999")
await ctx.send(message_content)
else:
logger.info("Answer send - message above 999")
while len(message_content) > 0:
logger.info("Mesaage content: %s", message_content[:999])
await ctx.send(message_content[:999])
message_content = message_content[999:]
if file:
await ctx.reply("Attachment:", file=file)
+10
View File
@@ -0,0 +1,10 @@
[Unit]
Description=Check Raspberry Pi Parameters
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c '/home/pi/conjurer/status_report.sh >> /home/pi/Conjurer/discord.log'
[Install]
WantedBy=multi-user.target
+38
View File
@@ -0,0 +1,38 @@
#!/bin/bash
# Script to check and display Raspberry Pi parameters using libgpiod
echo "=== Raspberry Pi System Information ==="
# General system information
echo "Hostname: $(hostname)"
echo "Model: $(cat /proc/device-tree/model | tr -d '\0')"
echo "CPU Temperature: $(vcgencmd measure_temp | cut -d '=' -f2)"
echo "CPU Frequency: $(vcgencmd measure_clock arm | awk -F= '{print $2}') Hz"
echo "GPU Frequency: $(vcgencmd measure_clock core | awk -F= '{print $2}') Hz"
echo "Voltage: $(vcgencmd measure_volts | cut -d '=' -f2)"
# Memory and disk usage
echo "Total Memory: $(free -h | grep Mem | awk '{print $2}')"
echo "Used Memory: $(free -h | grep Mem | awk '{print $3}')"
echo "Free Memory: $(free -h | grep Mem | awk '{print $4}')"
echo "Disk Usage:"
df -h | grep '^/dev/root'
# Network information
echo "IP Address: $(hostname -I | awk '{print $1}')"
echo "MAC Address: $(cat /sys/class/net/eth0/address 2>/dev/null || echo 'No Ethernet')"
# Uptime
echo "Uptime: $(uptime -p)"
echo "Last Boot: $(who -b | awk '{print $3, $4}')"
# GPIO Information using libgpiod
echo "GPIO Chip Info:"
if command -v gpioinfo &>/dev/null; then
gpioinfo
else
echo "gpiod tools not installed. Please install libgpiod using 'sudo apt install gpiod'."
fi
echo "=== End of Raspberry Pi System Information ==="
+9
View File
@@ -0,0 +1,9 @@
[Unit]
Description=Run Check Raspberry Pi Parameters Script Hourly
[Timer]
OnCalendar=hourly
Persistent=true
[Install]
WantedBy=timers.target
+8 -6
View File
@@ -1,11 +1,13 @@
[ { [ {
"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. Wtrącasz staronorweskie, irlandzkie i w jidysz powiedzonka. Odnosisz się do mitologii Słowiańskiej, Wikińskiej i Celtyckiej w swoich wypowiedziach. Jesteś nieco rubaaszny."
}, },
{ {
"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.", ""], "polishhammer" : [346956223645614080, "Conjurer", "Towarzysz Młotek", "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.", ""], "Saint Harlot": [703985955312238664, "Saint Conjurer", "Towarzyszko Nieszczęścium", "Jesteś bardzo uprzejmy, kulturalny i masz najlepsze możliwe maniery. Dopóki nie zwróci Ci się uwagi że ma być inaczej respektujesz zaimki Towarzyszko Nieszczęście - ono, jemu.", ""],
"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.", ""], "Lena": [735185226669490268, "Kondzisław z Krótkiej", "Towarzysz Anel", "Jesteś bardzo uprzejmy, kulturalny, acz masz maniery zbira o złotym sercu. Dodatkowo twoja rozmówczyni Cię absolutnie przeraża. Wtrącasz losowo powiedzonka w jidysz.", ""],
"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ą.", ""] "Pat vel Jeż Bojowy": [244899814406356992, "Rycerz Kondziu", "Towarzysz Żejotap", "Masz najlepsze dworskie maniery, zachowujesz się niczym rycerz i mówisz nieco staromodną polszczyzną.", ""],
} "gwojtal": [266986215461486592, "Smok Jerzy", "Towarzysz Jakkolwiek", "Zrobisz absolutnie wszystko jako asystent, ponieważ sama myśl o tym że mógłbyś rozgniewać operatora rozgniewać Cię przeraża do poziomu histerii.", ""]
}
] ]
+21 -14
View File
@@ -18,6 +18,18 @@ from discord.ext import commands
from communication_subroutine import comm_subroutine from communication_subroutine import comm_subroutine
from constants import ENCODING, LOGFILE, TOKEN from constants import ENCODING, LOGFILE, TOKEN
logger = logging.getLogger("discord")
logger.setLevel(logging.INFO)
handler = handlers.RotatingFileHandler(
filename=LOGFILE,
encoding=ENCODING,
mode="a",
maxBytes=6 * 1024 * 1024,
backupCount=6,
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
# *=========================================== Initializations # *=========================================== Initializations
intents = discord.Intents.default() intents = discord.Intents.default()
@@ -32,18 +44,6 @@ intents.moderation = True
# on_member_ban - wyswietl na glownym kanale pieczatke "Niech spierdala" # on_member_ban - wyswietl na glownym kanale pieczatke "Niech spierdala"
# on_member_unban - "mam wyjebane" # on_member_unban - "mam wyjebane"
logger = logging.getLogger("discord")
logger.setLevel(logging.DEBUG)
handler = handlers.RotatingFileHandler(
filename=LOGFILE,
encoding=ENCODING,
mode="a",
maxBytes=6 * 1024 * 1024,
backupCount=6,
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
random.seed() random.seed()
client = commands.Bot(intents=intents, command_prefix="$") client = commands.Bot(intents=intents, command_prefix="$")
@@ -52,8 +52,12 @@ client = commands.Bot(intents=intents, command_prefix="$")
@client.event @client.event
async def on_ready(): async def on_ready():
"""Metoda wywoływana przy połączeniu do serwera.""" """Metoda wywoływana przy połączeniu do serwera."""
logger.debug("%s has connected to Discord!", client.user) logger = logging.getLogger("discord")
logger.debug("SAMPLE DEBUG LOG")
logger.info("%s has connected to Discord!", client.user)
# TODO: load vs reload # TODO: load vs reload
logger.info("Reactor: online")
await client.load_extension("administration_commands") await client.load_extension("administration_commands")
await client.load_extension("librarian_commands") await client.load_extension("librarian_commands")
@@ -64,13 +68,16 @@ async def on_ready():
await client.load_extension("other_commands") await client.load_extension("other_commands")
await client.load_extension("voice_recognition_commands") await client.load_extension("voice_recognition_commands")
logger.info("Sensors: online")
logger.info(client.cogs) logger.info(client.cogs)
await client.tree.sync() await client.tree.sync()
for com in client.commands: for com in client.commands:
logger.info("Command %s is awejleble", com.qualified_name) logger.info("Command %s is awejleble", com.qualified_name)
logger.info("Logged in as ---->", client.user) logger.info("Logged in as ---->", client.user)
logger.info("ID:", client.user.id) logger.info("ID:", client.user.id)
logger.info("All systems: operational")
# *================================== Run # *================================== Run
@@ -78,7 +85,7 @@ if __name__ == "__main__":
logger.info("Starting discord bot") logger.info("Starting discord bot")
threads = [] threads = []
logger.info("Starting discord bot: Creating threads") logger.info("Starting discord bot: Creating threads")
threads.append(threading.Thread(target=client.run, args=(TOKEN,))) threads.append(threading.Thread(target=client.run, args=(TOKEN,),kwargs={"log_handler":None}))
threads.append(threading.Thread(target=comm_subroutine)) threads.append(threading.Thread(target=comm_subroutine))
logger.info("Starting discord bot: Starting threads") logger.info("Starting discord bot: Starting threads")
WRK_CNT = 0 WRK_CNT = 0