mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
Compare commits
109 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| dc8787956d | |||
| b499a6b456 | |||
| 1a4f4a6f17 | |||
| f44994688e | |||
| 2da45012f3 | |||
| ff9d2c67f0 | |||
| 20ac94b61d | |||
| e2d286d7b6 | |||
| 21ec8d8bc9 | |||
| e263857e4f | |||
| aa92b7f512 | |||
| 4ece2f215e | |||
| 85f91b3994 | |||
| ca2e1a35aa | |||
| f9dcec6d9e | |||
| 8ba676df9f | |||
| 69bf2973b9 | |||
| 41ad91ab93 | |||
| a4065684b0 | |||
| cc57b0c52d | |||
| 2e23956986 | |||
| f9c2bbf993 | |||
| b6bbb50707 | |||
| 3d5d8a2c14 | |||
| 9823a94025 | |||
| 194674705e | |||
| b513704a3d | |||
| 15253f95fb | |||
| 69afb00897 | |||
| e4a47d025c | |||
| 4f109da335 | |||
| 230242bf5c | |||
| e290e7d656 | |||
| 62f6b64bfb | |||
| cd307d642e | |||
| 81c43aadcc | |||
| 73057921ec | |||
| cd1beac93f | |||
| 784163b9c9 | |||
| 8429d4efd5 | |||
| 06192c41ad | |||
| 22730776d4 | |||
| a72dba291b | |||
| b98e3e4ebc | |||
| ff2669d079 | |||
| 05166859a3 | |||
| 4a6afa14cc | |||
| 5a74e813eb | |||
| be3f639573 | |||
| 620e6ddc06 | |||
| 6a6821ce4c | |||
| 2bb65bbc40 | |||
| aa63ffc754 | |||
| 0dbb79719b | |||
| 06d17a2e4d | |||
| ecc2e1f107 | |||
| a981209399 | |||
| 885f492f69 | |||
| 5363969456 | |||
| 637926973c | |||
| 9701c7233f | |||
| e6960c98b8 | |||
| 3f4018fa00 | |||
| 9af2d34179 | |||
| 93db61558c | |||
| 97f780688e | |||
| 49e1121967 | |||
| f4f4deb848 | |||
| b15c2f06b8 | |||
| 14b9a50f51 | |||
| 090adf3741 | |||
| 68d17a11b3 | |||
| 1b26fdd841 | |||
| f1129f18cb | |||
| 64669887a3 | |||
| 6d3ce5d714 | |||
| e05f58624a | |||
| 651d796254 | |||
| b3e5a1aaf3 | |||
| 1f0e03590d | |||
| 0ad06cc69c | |||
| 6b5d312231 | |||
| 0674e1a1a8 | |||
| 61acd3f3f3 | |||
| 3ccc89f572 | |||
| 86f512cb34 | |||
| bf808eb634 | |||
| d3bd79b505 | |||
| 24247aa760 | |||
| 443d06280b | |||
| 1625149c64 | |||
| 93330638be | |||
| a830dfb18c | |||
| 28c1565405 | |||
| de3bae7a7f | |||
| 94132a8962 | |||
| 88d8a1bcbe | |||
| dbe33286da | |||
| bbc91fbd73 | |||
| f0bb8f7ac2 | |||
| 061bab8e6d | |||
| bda7c6cc2e | |||
| 3d02d06862 | |||
| c225a3e252 | |||
| 489dd9feb6 | |||
| 63366f7ea1 | |||
| 73f184b263 | |||
| d53feec563 | |||
| ab199fc285 |
@@ -11,7 +11,15 @@ import numpy as np
|
||||
from discord.ext import commands, tasks
|
||||
|
||||
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):
|
||||
@@ -19,11 +27,33 @@ class AdministrationModule(commands.Cog):
|
||||
self.bot = bot
|
||||
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(
|
||||
name="update_banlist",
|
||||
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 update_banlist(self, ctx):
|
||||
"""
|
||||
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",
|
||||
delete_message_seconds=0,
|
||||
)
|
||||
# TODO: Maybe use guild.bulk_ban ?
|
||||
cunter_counter += 1
|
||||
except discord.NotFound:
|
||||
self.logger.info(
|
||||
@@ -107,6 +138,12 @@ class AdministrationModule(commands.Cog):
|
||||
f"Nie mam na serwerze {guild} uprawnień do banowania. :()"
|
||||
)
|
||||
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):
|
||||
"""
|
||||
@@ -212,7 +249,7 @@ class AdministrationModule(commands.Cog):
|
||||
self.logger.debug(TIME_BETWEEN_CALLS)
|
||||
LAST_SPONTANEOUS_CALL = datetime.now()
|
||||
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(message)
|
||||
await channel.send(message)
|
||||
|
||||
+213
-57
@@ -3,32 +3,166 @@ import logging
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
from enum import Enum
|
||||
from typing import Optional
|
||||
from pathlib import Path
|
||||
import discord
|
||||
import openai
|
||||
import requests
|
||||
from discord.ext import commands
|
||||
from other_functions import discord_friendly_send, discord_friendly_reply
|
||||
|
||||
from ai_functions import handle_response
|
||||
|
||||
import ai_functions
|
||||
from constants import (
|
||||
ASSISTANTS,
|
||||
DATA,
|
||||
GRAPHICS_PATH,
|
||||
INITIAL_TIME_WAIT,
|
||||
MASTER_TIMEOUT,
|
||||
MESSAGE_TABLE,
|
||||
OPENAICLIENT,
|
||||
SPECJALNE_ZIEMNIACZKI,
|
||||
WORD_REACTIONS,
|
||||
)
|
||||
|
||||
|
||||
class Dm_Mode(Enum):
|
||||
ARMIA_HAMMERA = (1,)
|
||||
SPECJALNY_ZIEMNIACZEK = (2,)
|
||||
SEKRETNY_SEKSRET = (3,)
|
||||
ECHO_ECHO = (4,)
|
||||
|
||||
|
||||
class Events(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
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)
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_ready(self):
|
||||
print("Ready!")
|
||||
print("Logged in as ---->", self.bot.user)
|
||||
print("ID:", self.bot.user.id)
|
||||
async def cog_load(self):
|
||||
self.logger.info("Starting personal assistants")
|
||||
for superfryta_id, superfryta in SPECJALNE_ZIEMNIACZKI.items():
|
||||
|
||||
if superfryta[4] != "":
|
||||
self.logger.info(
|
||||
"Personal assistant for user: %s, exists id: %s,name: %s, owner: %s, special instructions: %s assistant id: %s ",
|
||||
superfryta_id,
|
||||
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 for user: %s, id: %s,name: %s, owner: %s, special instructions: %s",
|
||||
superfryta_id,
|
||||
superfryta[0],
|
||||
superfryta[1],
|
||||
superfryta[2],
|
||||
superfryta[3],
|
||||
)
|
||||
await ai_functions.create_chat_assistant(
|
||||
superfryta_id, superfryta[0], superfryta[1], superfryta[2], superfryta[3]
|
||||
)
|
||||
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():
|
||||
self.logger.info(ctx.message.author.id)
|
||||
self.logger.info(superfryta)
|
||||
if ctx.message.author.id == superfryta[0]:
|
||||
self.armia[ctx.message.author.id] = dm_mode_arg
|
||||
self.logger.info(self.armia)
|
||||
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]
|
||||
):
|
||||
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):
|
||||
self.logger.info("Armia Hammera")
|
||||
recipients = []
|
||||
if recipient:
|
||||
recipients.append(recipient.id)
|
||||
else:
|
||||
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
|
||||
recipients.append(superfryta[0])
|
||||
self.logger.info(recipients)
|
||||
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 discord_friendly_send(channel, message_txt)
|
||||
await discord_friendly_reply(ctx, "Poszło")
|
||||
|
||||
@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")
|
||||
|
||||
@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")
|
||||
|
||||
@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")
|
||||
|
||||
@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()
|
||||
async def on_message(self, message):
|
||||
@@ -45,6 +179,7 @@ class Events(commands.Cog):
|
||||
channel = None
|
||||
if message.author == self.bot.user:
|
||||
return
|
||||
|
||||
if isinstance(message.author, discord.Member):
|
||||
for role in message.author.roles:
|
||||
if role.name == "Vykidailo":
|
||||
@@ -65,43 +200,61 @@ class Events(commands.Cog):
|
||||
if message.channel.id == 1111625221171052595:
|
||||
return
|
||||
if isinstance(message.channel, discord.DMChannel):
|
||||
if message.author.id == 346956223645614080:
|
||||
await message.reply("Witam witam")
|
||||
return
|
||||
else:
|
||||
channel = self.bot.get_channel(1064888712565100614)
|
||||
await channel.send("Słyszałem ja żem że: " + message.content)
|
||||
return
|
||||
channel = message.channel
|
||||
#await self.bot.process_commands(message) #uncomment to bilocate
|
||||
self.logger.info(message.author.id)
|
||||
for superfryta in SPECJALNE_ZIEMNIACZKI.values():
|
||||
self.logger.info(superfryta[0])
|
||||
|
||||
message.content = message.content.lower()
|
||||
if message.author.id == superfryta[0]:
|
||||
self.logger.info("Specjalny ziemniak")
|
||||
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])
|
||||
return
|
||||
elif self.armia[message.author.id] == Dm_Mode.ECHO_ECHO:
|
||||
await ai_functions.echo(message)
|
||||
return
|
||||
elif self.armia[message.author.id] == Dm_Mode.ARMIA_HAMMERA:
|
||||
self.logger.info("Armia Hammera get context")
|
||||
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
|
||||
elif self.armia[message.author.id] == Dm_Mode.SEKRETNY_SEKSRET:
|
||||
pass
|
||||
else:
|
||||
await discord_friendly_send(message.channel,"Coś się wyebao. Wołaj Hammera")
|
||||
return
|
||||
channel = self.bot.get_channel(1064888712565100614)
|
||||
await discord_friendly_send(channel, "Słyszałem ja żem że: " + message.content)
|
||||
return
|
||||
channel = message.channel
|
||||
message_content_lower = message.content.lower()
|
||||
|
||||
tdelta = datetime.now() - MASTER_TIMEOUT
|
||||
tdelta = tdelta.total_seconds()
|
||||
if "opowiedz o fabryczce" in message.content:
|
||||
if "opowiedz o fabryczce" in message_content_lower:
|
||||
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"])
|
||||
|
||||
if tdelta > INITIAL_TIME_WAIT:
|
||||
for word in self.word_reactions:
|
||||
if re.search(r"\b" + word + r"\b", message.content):
|
||||
tdelta = datetime.now() - self.word_reactions[word][2]
|
||||
for word in WORD_REACTIONS:
|
||||
if re.search(r"\b" + word + r"\b", message_content_lower):
|
||||
tdelta = datetime.now() - WORD_REACTIONS[word][2]
|
||||
tdelta = tdelta.total_seconds()
|
||||
security_clearance = self.word_reactions[word][4]
|
||||
reaction = self.word_reactions[word][3]
|
||||
if tdelta > self.word_reactions[word][1]:
|
||||
security_clearance = WORD_REACTIONS[word][4]
|
||||
reaction = WORD_REACTIONS[word][3]
|
||||
if tdelta > WORD_REACTIONS[word][1]:
|
||||
# TODO: to zrobic reactiony
|
||||
self.logger.info("Ping z procedury reakcji")
|
||||
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)
|
||||
elif security_clearance and vykidailo:
|
||||
await message.reply(self.word_reactions[word][0])
|
||||
await message.reply(WORD_REACTIONS[word][0])
|
||||
elif not security_clearance:
|
||||
await message.reply(self.word_reactions[word][0])
|
||||
self.word_reactions[word][2] = datetime.now()
|
||||
await message.reply(WORD_REACTIONS[word][0])
|
||||
WORD_REACTIONS[word][2] = datetime.now()
|
||||
|
||||
# TODO: drobne literówki, mentiony, spacja przed dwukropkiem. napraw.
|
||||
kondziu_mentioned = False
|
||||
@@ -109,11 +262,11 @@ class Events(commands.Cog):
|
||||
if mention == self.bot.user:
|
||||
kondziu_mentioned = True
|
||||
|
||||
if kondziu_mentioned or "conjurer:" in message.content:
|
||||
if kondziu_mentioned or "conjurer:" in message_content_lower:
|
||||
async with channel.typing():
|
||||
self.logger.debug("Procedura chatu")
|
||||
|
||||
message.content = message.content.replace("conjurer: ", "")
|
||||
message_content_lower = message_content_lower.replace("conjurer: ", "")
|
||||
if message.author.nick:
|
||||
username = message.author.nick
|
||||
else:
|
||||
@@ -131,7 +284,7 @@ class Events(commands.Cog):
|
||||
bartender = True
|
||||
global MESSAGE_TABLE # pylint: disable=global-statement
|
||||
|
||||
result, MESSAGE_TABLE = await handle_response(
|
||||
result, MESSAGE_TABLE = await ai_functions.handle_response(
|
||||
prompt,
|
||||
vykidailo,
|
||||
bartender,
|
||||
@@ -140,17 +293,17 @@ class Events(commands.Cog):
|
||||
"CONVERSATION",
|
||||
)
|
||||
|
||||
if len(result) < 1500:
|
||||
if len(result) < 999:
|
||||
await message.reply(result)
|
||||
else:
|
||||
while len(result) > 1500:
|
||||
await message.reply(result[:1500])
|
||||
result = result[1500:]
|
||||
while len(result) > 999:
|
||||
await message.reply(result[:999])
|
||||
result = result[999:]
|
||||
if "imaginuje sobie:" in message.content:
|
||||
async with channel.typing():
|
||||
self.logger.info("Poczatek procedury obrazkowej")
|
||||
message.content = message.content.replace("imaginuje sobie: ", "")
|
||||
self.logger.debug("Wywolanie obrazka: %s", message.content)
|
||||
message_content_lower = message_content_lower.replace("imaginuje sobie: ", "")
|
||||
self.logger.debug("Wywolanie obrazka: %s", message_content_lower)
|
||||
try:
|
||||
response = await OPENAICLIENT.images.generate(
|
||||
model="dall-e-3",
|
||||
@@ -161,12 +314,12 @@ class Events(commands.Cog):
|
||||
)
|
||||
except openai.APITimeoutError as e:
|
||||
# Handle timeout error, e.g. retry or log
|
||||
await message.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}"
|
||||
await discord_friendly_reply(
|
||||
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:
|
||||
await message.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}"
|
||||
await discord_friendly_reply(
|
||||
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:
|
||||
# Handle invalid request error, e.g. validate parameters or log
|
||||
@@ -174,7 +327,7 @@ class Events(commands.Cog):
|
||||
username = message.author.nick
|
||||
else:
|
||||
username = message.author.name
|
||||
resp, _ = await handle_response(
|
||||
resp, _ = await ai_functions.handle_response(
|
||||
f"Wytlumacz jakie sa zasady dotyczące treści które możesz generować używając Dalle. Wytłumacz błąd {e} prostym językiem. Przeproś za nadmierną cenzurę. Wytłumacz co mogło być nie tak w prompcie '{message.content}'",
|
||||
True,
|
||||
True,
|
||||
@@ -182,29 +335,29 @@ class Events(commands.Cog):
|
||||
username,
|
||||
"RANDOM",
|
||||
)
|
||||
await message.reply(
|
||||
f"Sorki, cenzura: {resp}. Jak chcesz to są kanały na nudle #sexy-foteczky i #kanal-do-fapania *Na ekranie pojawia się: {e}"
|
||||
await discord_friendly_reply(
|
||||
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:
|
||||
# Handle authentication error, e.g. check credentials or log
|
||||
await message.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}"
|
||||
await discord_friendly_reply(
|
||||
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:
|
||||
# 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:
|
||||
await message.reply(
|
||||
f"*Kondziu patrzy na terminal* Wołaj szefa. Zapłacić rachunki za AI trzeba. Jak chcesz to się na #zebranie dorzuć. {e}"
|
||||
await discord_friendly_reply(
|
||||
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:
|
||||
# Handle API error, e.g. retry or log
|
||||
await message.reply(
|
||||
f"*Kondziu nurkuje za bar, terminal wybucha. Przed tobą ląduje pergamin zapisany pięknym gotykiem a na nim*: {e}"
|
||||
await discord_friendly_reply(
|
||||
message, f"*Kondziu nurkuje za bar, terminal wybucha. Przed tobą ląduje pergamin zapisany pięknym gotykiem a na nim*: {e}"
|
||||
)
|
||||
if response:
|
||||
self.logger.info(response)
|
||||
@@ -213,18 +366,21 @@ class Events(commands.Cog):
|
||||
self.logger.debug("Wynikowy obrazek pod url: %s", image_url)
|
||||
response = requests.get(image_url, timeout=360)
|
||||
|
||||
|
||||
temp_file_name = 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
|
||||
with open(temp_file_name, "wb") as dalle_file:
|
||||
dalle_file.write(response.content)
|
||||
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)
|
||||
|
||||
|
||||
#await message.reply(f"{image_desc}", file=fnord)
|
||||
await discord_friendly_reply(message,f"{image_desc}", file = fnord)
|
||||
# *=========================================== Define Functions
|
||||
|
||||
|
||||
|
||||
+116
-2
@@ -5,8 +5,9 @@ import random
|
||||
|
||||
import openai
|
||||
import tiktoken
|
||||
|
||||
from other_functions import discord_friendly_send
|
||||
from constants import (
|
||||
ASSISTANTS,
|
||||
CYCLIC_WORDS,
|
||||
ENCODING,
|
||||
GPT_SETTINGS,
|
||||
@@ -15,9 +16,63 @@ from constants import (
|
||||
MESSAGE_TABLE,
|
||||
MESSAGE_TABLE_MUZYKA,
|
||||
OPENAICLIENT,
|
||||
SYSTEM_GPT_SETTINGS,
|
||||
WORD_REACTIONS,
|
||||
)
|
||||
|
||||
#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]}},
|
||||
)
|
||||
|
||||
|
||||
def num_tokens_from_string(message, model):
|
||||
"""
|
||||
@@ -62,7 +117,6 @@ async def handle_response(
|
||||
and the response will be generated using a different model
|
||||
: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.info("Wywolanie procedury openai z promptem: %s", prompt)
|
||||
temp = {"role": "user", "content": username + ":" + prompt}
|
||||
@@ -292,3 +346,63 @@ async def get_random_cyclic_message(client):
|
||||
)
|
||||
logger.info(result)
|
||||
return result
|
||||
|
||||
|
||||
async def create_chat_assistant(owner_id, id, name, owner, special_instructions):
|
||||
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,
|
||||
instructions=instruction,
|
||||
model="gpt-4o",
|
||||
tools=[{"type": "file_search"}],
|
||||
)
|
||||
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)
|
||||
|
||||
with open(SYSTEM_GPT_SETTINGS, "r+", encoding=ENCODING) as temp_settings_file:
|
||||
GPT_SETTINGS = json.load(temp_settings_file)
|
||||
GPT_SETTINGS[1][owner_id][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 discord_friendly_send(message.channel, chat_response)
|
||||
#await message.channel.send(chat_response)
|
||||
done = True
|
||||
elif run.status == "cancelled":
|
||||
await discord_friendly_send(message.channel, "Cos sie wywaliło")
|
||||
else:
|
||||
logger.info(run.status)
|
||||
asyncio.sleep(5)
|
||||
|
||||
|
||||
async def echo(message):
|
||||
await discord_friendly_send(message.channel, f"Echo: {message.content}")
|
||||
|
||||
@@ -7,16 +7,26 @@ API endpoints.
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import random
|
||||
import re
|
||||
import requests
|
||||
import threading
|
||||
import time
|
||||
from flask_autoindex import AutoIndex
|
||||
from datetime import datetime
|
||||
from logging import handlers
|
||||
from pathlib import Path
|
||||
from platform import uname
|
||||
from sys import platform
|
||||
from flask import Flask, jsonify, redirect, request, send_from_directory, render_template
|
||||
|
||||
import requests
|
||||
from flask import (
|
||||
Flask,
|
||||
jsonify,
|
||||
redirect,
|
||||
render_template,
|
||||
request,
|
||||
send_from_directory,
|
||||
)
|
||||
from waitress import serve
|
||||
|
||||
MAIN_BOT_ADDRESS = "http://192.168.1.191:5000"
|
||||
@@ -31,8 +41,8 @@ if platform in ("linux", "linux2"):
|
||||
NETRC_FILE = "/home/mtuszowski/.netrc"
|
||||
LOGSTORE = "/home/mtuszowski/conjurer/logs/"
|
||||
ENCODING = "utf-8"
|
||||
RADIOLOG_PATH = '/home/pi/Conjurer/radio_log.log'
|
||||
PERSISTENCE_PATH = '/home/pi/Conjurer/persistence.log'
|
||||
RADIOLOG_PATH = "/home/pi/Conjurer/radio_log.log"
|
||||
PERSISTENCE_PATH = "/home/pi/Conjurer/persistence.log"
|
||||
|
||||
else:
|
||||
LOGFILE = "/home/pi/Conjurer/discord_mus_service.log"
|
||||
@@ -41,13 +51,14 @@ if platform in ("linux", "linux2"):
|
||||
ENCODING = "utf-8"
|
||||
MUSIC_FOLDER = "/home/pi/RetroPie/mp3/"
|
||||
PRIORITY_FOLDER = "/home/pi/RetroPie/mp3/Magiczne i chuj/"
|
||||
RADIOLOG_PATH = '/home/pi/Conjurer/radio_log.log'
|
||||
PERSISTENCE_PATH = '/home/pi/Conjurer/persistence.log'
|
||||
|
||||
RADIOLOG_PATH = "/home/pi/Conjurer/radio_log.log"
|
||||
PERSISTENCE_PATH = "/home/pi/Conjurer/persistence.log"
|
||||
|
||||
random.seed()
|
||||
music_file_list = []
|
||||
priority_list = []
|
||||
|
||||
|
||||
def rescan():
|
||||
"""
|
||||
The `rescan` function logs a message, scans for mp3 files in a specified folder,
|
||||
@@ -69,8 +80,8 @@ def rescan():
|
||||
priority_list.append(temp_music_file)
|
||||
|
||||
with open(
|
||||
"/home/pi/Conjurer/all_playlist.playlist", "w", encoding="utf-8"
|
||||
) as w_file:
|
||||
"/home/pi/Conjurer/all_playlist.playlist", "w", encoding="utf-8"
|
||||
) as w_file:
|
||||
try:
|
||||
for item in music_file_list:
|
||||
w_file.write(item)
|
||||
@@ -100,11 +111,11 @@ def thread_rescan():
|
||||
|
||||
|
||||
def scan_tracks():
|
||||
#Set the filename and open the file
|
||||
# Set the filename and open the file
|
||||
logger = logging.getLogger("conjurer_musician")
|
||||
|
||||
file = open(RADIOLOG_PATH,'r')
|
||||
#Find the size of the file and move to the end
|
||||
file = open(RADIOLOG_PATH, "r")
|
||||
# Find the size of the file and move to the end
|
||||
st_results = os.stat(RADIOLOG_PATH)
|
||||
st_size = st_results[6]
|
||||
file.seek(st_size)
|
||||
@@ -121,14 +132,13 @@ def scan_tracks():
|
||||
st_results1 = os.stat(PERSISTENCE_PATH)
|
||||
st_size1 = st_results1[6]
|
||||
time.sleep(0.1)
|
||||
file1 = open(PERSISTENCE_PATH, 'r')
|
||||
file1 = open(PERSISTENCE_PATH, "r")
|
||||
lines = file1.readlines()
|
||||
result = ["next", lines[2]]
|
||||
file1.close()
|
||||
returned = requests.post(
|
||||
f"{MAIN_BOT_ADDRESS}{MUSIC_TRACKER}",
|
||||
json=result,
|
||||
timeout=360)
|
||||
f"{MAIN_BOT_ADDRESS}{MUSIC_TRACKER}", json=result, timeout=360
|
||||
)
|
||||
logger.info("SENT")
|
||||
logger.info(returned.status_code)
|
||||
logger.info("SEND CONFIRMED")
|
||||
@@ -139,33 +149,32 @@ def scan_tracks():
|
||||
time.sleep(1)
|
||||
file.seek(where)
|
||||
else:
|
||||
if re.match(".*Prepared.*",line):
|
||||
if re.match(".*Prepared.*", line):
|
||||
result = None
|
||||
if re.match(".*jingles.*", line):
|
||||
logger.info("jingles")
|
||||
logger.info(line) # already has newline
|
||||
logger.info(line) # already has newline
|
||||
result = ["jingles", line]
|
||||
elif re.match(".*priority.*", line):
|
||||
logger.info("priority")
|
||||
logger.info(line) # already has newline
|
||||
logger.info(line) # already has newline
|
||||
result = ["priority", line]
|
||||
elif re.match(".*hit.*", line):
|
||||
logger.info("hit")
|
||||
logger.info(line) # already has newline
|
||||
logger.info(line) # already has newline
|
||||
result = ["hit", line]
|
||||
elif re.match(".*all_playlist.*", line):
|
||||
logger.info("all")
|
||||
logger.info(line) # already has newline
|
||||
logger.info(line) # already has newline
|
||||
result = ["all", line]
|
||||
elif re.match(".*request.*", line):
|
||||
logger.info("requests")
|
||||
logger.info(line) # already has newline
|
||||
logger.info(line) # already has newline
|
||||
result = ["requests", line]
|
||||
if result:
|
||||
returned = requests.post(
|
||||
f"{MAIN_BOT_ADDRESS}{MUSIC_TRACKER}",
|
||||
json=result,
|
||||
timeout=360)
|
||||
f"{MAIN_BOT_ADDRESS}{MUSIC_TRACKER}", json=result, timeout=360
|
||||
)
|
||||
logger.info("SENT")
|
||||
logger.info(returned.status_code)
|
||||
logger.info("SEND CONFIRMED")
|
||||
@@ -173,7 +182,7 @@ def scan_tracks():
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
#AutoIndex(app, browse_root="/")
|
||||
|
||||
# TODO: Odpalić wyszukiwarki w wątkach i dopiero po wszystkim zsumować wyszukiwanie.
|
||||
def wyszukaj(word_list, how_many, _logger=None, return_to_bot=True):
|
||||
@@ -330,9 +339,10 @@ def stream_music():
|
||||
:return: A JSON response containing a key "music_file_list" with the value of the variable `music_file_list`.
|
||||
"""
|
||||
|
||||
#return send_from_directory("/tmp/hls", "stream.m3u8")
|
||||
# return send_from_directory("/tmp/hls", "stream.m3u8")
|
||||
return render_template("/home/pi/Conjurer/stream.html")
|
||||
|
||||
|
||||
@app.route("/<string:file_name>")
|
||||
def stream(file_name):
|
||||
"""
|
||||
@@ -348,6 +358,7 @@ def stream(file_name):
|
||||
video_dir = "/tmp/hls"
|
||||
return send_from_directory(video_dir, file_name)
|
||||
|
||||
|
||||
@app.route("/stream_mp3", methods=["GET"])
|
||||
def stream_music_mp3():
|
||||
"""
|
||||
@@ -367,8 +378,10 @@ def clear_pr_pls():
|
||||
:return: A JSON response indicating the success of the operation.
|
||||
"""
|
||||
app.logger.info("CLEARING PLAYLIST")
|
||||
with open('/home/pi/Conjurer/priority_queue.playlist', 'w', encoding='utf-8') as cleared_pl:
|
||||
cleared_pl.write('')
|
||||
with open(
|
||||
"/home/pi/Conjurer/priority_queue.playlist", "w", encoding="utf-8"
|
||||
) as cleared_pl:
|
||||
cleared_pl.write("")
|
||||
|
||||
return_data = jsonify(isError=False, message="Success", statusCode=200, data=[])
|
||||
return return_data, 200
|
||||
@@ -438,21 +451,20 @@ def add_request():
|
||||
app.logger.info(record)
|
||||
app.logger.info(record["lista_slow"])
|
||||
app.logger.info(record["UUID"])
|
||||
return_data = wyszukaj(
|
||||
record["lista_slow"], 0, app.logger, False
|
||||
)
|
||||
return_data = wyszukaj(record["lista_slow"], 0, app.logger, False)
|
||||
|
||||
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:
|
||||
s_file.write(item[1] + "\n")
|
||||
return_data = (
|
||||
jsonify(isError=False, message="Success", statusCode=200, data={"status": "OK"}),
|
||||
jsonify(
|
||||
isError=False, message="Success", statusCode=200, data={"status": "OK"}
|
||||
),
|
||||
200,
|
||||
)
|
||||
return return_data
|
||||
|
||||
|
||||
@app.route("/create_priority_playlist", methods=["POST"])
|
||||
def create_priority_playlist():
|
||||
"""
|
||||
@@ -474,13 +486,14 @@ def create_priority_playlist():
|
||||
return_data = wyszukaj(
|
||||
record["lista_slow"], record["dlugosc_plejlisty"], app.logger, False
|
||||
)
|
||||
with open(
|
||||
"/home/pi/Conjurer/request.playlist", "a", encoding="utf-8"
|
||||
) as s_file:
|
||||
return_data = random.shuffle(return_data)
|
||||
with open("/home/pi/Conjurer/request.playlist", "a", encoding="utf-8") as s_file:
|
||||
for item in return_data:
|
||||
s_file.write(item[1] + "\n")
|
||||
return_data = (
|
||||
jsonify(isError=False, message="Success", statusCode=200, data={"status": "OK"}),
|
||||
jsonify(
|
||||
isError=False, message="Success", statusCode=200, data={"status": "OK"}
|
||||
),
|
||||
200,
|
||||
)
|
||||
return return_data
|
||||
@@ -513,7 +526,9 @@ def add_to_priority():
|
||||
for item in return_data:
|
||||
s_file.write(item[1] + "\n")
|
||||
return_data = (
|
||||
jsonify(isError=False, message="Success", statusCode=200, data={"status": "OK"}),
|
||||
jsonify(
|
||||
isError=False, message="Success", statusCode=200, data={"status": "OK"}
|
||||
),
|
||||
200,
|
||||
)
|
||||
return return_data
|
||||
|
||||
@@ -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
|
||||
interactive.harbor(port = 9999)
|
||||
|
||||
# Set up interactive controls for bass boost
|
||||
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.)
|
||||
@@ -64,27 +63,33 @@ b = bass_boost(frequency=f, gain=g, s)
|
||||
s = add([s, b])
|
||||
|
||||
# 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)
|
||||
|
||||
mic_gain = interactive.float("mic_volume", min=0., max=20., 6.)
|
||||
mic_gain = interactive.float("mic_volume", min=0., max=120., 0.5)
|
||||
|
||||
# Apply audio processing effects
|
||||
tmic = buffer(input.pulseaudio()) # Microphone
|
||||
mic = amplify(mic_gain, tmic)
|
||||
mic = gate(threshold=-80., range=-120., mic)
|
||||
mic = compress(threshold=0., ratio=2.,mic)
|
||||
mic = blank.strip(max_blank=10., min_noise=.1, threshold=-20., mic)
|
||||
mic = nrj(normalize(mic))
|
||||
mic = blank.strip(max_blank=15., min_noise=.1, threshold=-30., mic)
|
||||
mic = fallback(id="switcher2", track_sensitive=false, [mic, blank()])
|
||||
|
||||
s = add([s, mic])
|
||||
# Apply audio processing effects
|
||||
s = nrj(normalize(s))
|
||||
s = nrj(s)
|
||||
s = amplify(a, s)
|
||||
# Skip blank sections in the stream
|
||||
s = blank.skip(max_blank=10., s)
|
||||
|
||||
#Manual audition override
|
||||
source_control = interactive.bool("Source control", true)
|
||||
s = switch(track_sensitive=false, [(source_control,mic),({true},s)])
|
||||
live_enabled = interactive.bool("Going Live!", true)
|
||||
|
||||
s = add([mic,s])
|
||||
s=switch(track_sensitive=false,
|
||||
[(live_enabled, mic),
|
||||
({true}, s)])
|
||||
|
||||
# Configure logging settings
|
||||
log_to_stdout = true
|
||||
@@ -101,6 +106,7 @@ set("log.file.path", logpath)
|
||||
# Set up emergency fallback track
|
||||
emergency = single("/home/pi/RetroPie/mp3/Youtube/Dr. Peacock - Trip to Ireland [GvrvQTUbUcA].mp3")
|
||||
radio = fallback(id="switcher2", track_sensitive=false, [s, emergency])
|
||||
|
||||
# Set up an interactive control for skipping tracks
|
||||
p = interactive.bool("Skip track", false)
|
||||
def http_skip(~protocol, ~data, ~headers, uri)=
|
||||
@@ -132,6 +138,7 @@ interactive.persistent("script.params")
|
||||
|
||||
# Configure output formats and destinations
|
||||
|
||||
|
||||
output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream", radio)
|
||||
output.pulseaudio(radio)
|
||||
#output.file.hls("/tmp/hls", [("mp3-low", %mp3(bitrate=96)), ("mp3-hi", %mp3(bitrate=160))], radio)
|
||||
|
||||
@@ -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:
|
||||
# First we load existing data into a dict.
|
||||
MESSAGE_TABLE_MUZYKA = json.load(temp_music_memory_file)
|
||||
SPECJALNE_ZIEMNIACZKI = GPT_SETTINGS[1]
|
||||
ASSISTANTS = {}
|
||||
|
||||
@@ -1,27 +1,86 @@
|
||||
#!/bin/bash
|
||||
cd /home/pi/conjurer || exit
|
||||
git pull
|
||||
cp ./deploy.sh /home/pi/
|
||||
cd /home/pi || exit
|
||||
#cp ./conjurer/bot.py ./Conjurer/ #legacy to be deprecated after refactor is done
|
||||
|
||||
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
|
||||
print_progress "cd /home/pi/conjurer"
|
||||
|
||||
git pull
|
||||
print_progress "git pull"
|
||||
|
||||
cp ./deploy.sh /home/pi/
|
||||
print_progress "cp ./deploy.sh /home/pi/"
|
||||
|
||||
cd /home/pi || exit
|
||||
print_progress "cd /home/pi"
|
||||
|
||||
cp ./conjurer/LICENSE ./Conjurer/LICENSE
|
||||
print_progress "cp ./conjurer/LICENSE ./Conjurer/LICENSE"
|
||||
|
||||
cp ./conjurer/fuckery.jpg ./Conjurer/
|
||||
print_progress "cp ./conjurer/fuckery.jpg ./Conjurer/"
|
||||
|
||||
cp ./conjurer/willowisp.png ./Conjurer/
|
||||
print_progress "cp ./conjurer/willowisp.png ./Conjurer/"
|
||||
|
||||
cp ./conjurer/wod_beacon.jpg ./Conjurer/
|
||||
print_progress "cp ./conjurer/wod_beacon.jpg ./Conjurer/"
|
||||
|
||||
cp ./conjurer/settings.json ./Conjurer/
|
||||
cp ./conjurer/system_gpt_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/
|
||||
print_progress "cp ./conjurer/administration_commands.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/ai_commands.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/ai_commands.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/ai_functions.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/ai_functions.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/communication_subroutine.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/communication_subroutine.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/constants.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/constants.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/librarian_commands.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/librarian_commands.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/music_commands.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/music_commands.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/music_functions.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/music_functions.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/other_commands.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/other_commands.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/other_functions.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/other_functions.py ./Conjurer/"
|
||||
|
||||
cp ./conjurer/radio_commands.py ./Conjurer/
|
||||
print_progress "cp ./conjurer/radio_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
|
||||
print_progress "cp ./conjurer/thin_client.py ./Conjurer/bot.py"
|
||||
|
||||
sudo systemctl restart conjurer.service
|
||||
print_progress "sudo systemctl restart conjurer.service"
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
@@ -28,6 +28,8 @@ class DataModule(commands.Cog):
|
||||
description="Wyświetla losową stronę z losowego komiksu FanSadox. Bardzo NSFW.",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
|
||||
async def get_image_sadox(self, ctx):
|
||||
"""
|
||||
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)
|
||||
self.logger.info("Get sadox completed")
|
||||
|
||||
# TODO: LIBRARIAN
|
||||
@tasks.loop(seconds=3)
|
||||
async def check_data_q(self):
|
||||
"""
|
||||
@@ -118,7 +119,6 @@ class DataModule(commands.Cog):
|
||||
except Empty:
|
||||
pass
|
||||
|
||||
# TODO: LIBRARIAN
|
||||
@commands.hybrid_command(
|
||||
name="wyszukaj_linki_do_dokumentow",
|
||||
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."
|
||||
)
|
||||
|
||||
# TODO: LIBRARIAN
|
||||
@commands.hybrid_command(
|
||||
name="glebokie_gardlo",
|
||||
description="Przygotowuje drinka o nazwie głębokie gardło",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
+123
-27
@@ -25,6 +25,7 @@ class MusicModule(commands.Cog):
|
||||
name="krecimy_pornola",
|
||||
description="Wiadomo co, dla kogo i po co",
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def krecimy_pornola(self, ctx):
|
||||
"""
|
||||
Download a music number from youtube.
|
||||
@@ -35,33 +36,28 @@ class MusicModule(commands.Cog):
|
||||
with the Discord API and
|
||||
"""
|
||||
await ctx.send("Dej mnie chwilkę")
|
||||
allowed = False
|
||||
for role in ctx.author.roles:
|
||||
if role.name == "Bartender":
|
||||
allowed = True
|
||||
if allowed:
|
||||
self.logger.info("Pornol")
|
||||
async with ctx.typing():
|
||||
# wyciagnij linka z kontekstu
|
||||
content = ctx.message.content.split()
|
||||
for item_yt in content:
|
||||
if re.match("http.*", item_yt):
|
||||
sciezka, files = await music_functions.get_file(
|
||||
ctx, "Pornol", item_yt
|
||||
self.logger.info("Pornol")
|
||||
async with ctx.typing():
|
||||
# wyciagnij linka z kontekstu
|
||||
content = ctx.message.content.split()
|
||||
for item_yt in content:
|
||||
if re.match("http.*", item_yt):
|
||||
sciezka, files = await music_functions.get_file(
|
||||
ctx, "Pornol", item_yt
|
||||
)
|
||||
if files:
|
||||
self.logger.info("Pornol udany")
|
||||
await ctx.send(
|
||||
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(
|
||||
name="co_na_plejliscie_wariacie",
|
||||
description="Wyswietl kawalki ktore sa na pocztku list radia",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
|
||||
async def co_na_plejliscie_wariacie(self, ctx):
|
||||
"""
|
||||
Download a music number from youtube.
|
||||
@@ -101,6 +97,7 @@ class MusicModule(commands.Cog):
|
||||
description="Podaj link do youtube - sciagnie i doda muzyke",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def dej_co_z_jutuba(self, ctx):
|
||||
"""
|
||||
Download a music number from youtube.
|
||||
@@ -132,6 +129,7 @@ class MusicModule(commands.Cog):
|
||||
description="Podaj link do spotify - sciagnie i doda muzyke",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def dej_co_ze_spotifaja(self, ctx):
|
||||
"""
|
||||
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.",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def cisza(self, ctx):
|
||||
"""
|
||||
Stop playback of the music and clear the queue.
|
||||
@@ -213,6 +212,7 @@ class MusicModule(commands.Cog):
|
||||
description="Przerzuca na następny kawałek",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def dalej(self, ctx):
|
||||
"""
|
||||
Play next track in queue.
|
||||
@@ -230,12 +230,12 @@ class MusicModule(commands.Cog):
|
||||
voice_client.stop()
|
||||
self.logger.info("Next completed")
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="daj_mi_chwile",
|
||||
description="Pauzuje",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def daj_mi_chwile(self, ctx):
|
||||
"""
|
||||
Pause music playback.
|
||||
@@ -254,12 +254,12 @@ class MusicModule(commands.Cog):
|
||||
voice_client.pause()
|
||||
self.logger.info("Pause completed")
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="graj_dalej",
|
||||
description="Odpauzowuje",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def graj_dalej(self, ctx):
|
||||
"""
|
||||
Unpause music and continue playback.
|
||||
@@ -277,12 +277,12 @@ class MusicModule(commands.Cog):
|
||||
voice_client.resume()
|
||||
self.logger.info("Unpause completed")
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="zagraj_mi_kawalek",
|
||||
description="Wyszukuje w bibliotece muzycznej Hammera kawałek który ma zostać zagrany",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def zagraj_mi_kawalek(self, ctx):
|
||||
"""
|
||||
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"
|
||||
)
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="zrob_mi_plejliste",
|
||||
description="Generuje playliste - param1 - dlugosc, potem slowa wyszukiwania",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
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.
|
||||
@@ -394,12 +394,12 @@ class MusicModule(commands.Cog):
|
||||
await ctx.send(reply)
|
||||
self.logger.info("Plejlista zrobiona")
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="zagraj_muzyke_mego_ludu",
|
||||
description="Gra muzyke wyszukana na bazie tematow konwersacji na kanale NZ",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def zagraj_muzyke_mego_ludu(self, ctx):
|
||||
"""
|
||||
Play completeley random playlist based on messaging history.
|
||||
@@ -480,12 +480,12 @@ class MusicModule(commands.Cog):
|
||||
await ctx.send(reply)
|
||||
self.logger.info("Plejlista zrobiona")
|
||||
|
||||
# TODO: MUSIC
|
||||
@commands.hybrid_command(
|
||||
name="parametry_muzyki_mego_ludu",
|
||||
description="Konfiguruje komende zagraj muzyke mojego ludu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def parametry_muzyki_mego_ludu(
|
||||
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.",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def graj_muzyko(self, ctx):
|
||||
"""
|
||||
Async function named "graj_muzyko" starts music playback on channel "Nocna Zmiana".
|
||||
@@ -598,6 +599,101 @@ class MusicModule(commands.Cog):
|
||||
return
|
||||
self.logger.info("Connected to voice")
|
||||
|
||||
@commands.hybrid_command(
|
||||
name="batch_download",
|
||||
description="Zaciąga obiekty z pliku",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def batch_download(self, ctx):
|
||||
content_type = ctx.message.attachments[0].content_type
|
||||
check = re.search("text\/plain; *charset=(.*)", content_type, re.IGNORECASE)
|
||||
await ctx.reply("Kurwa. Aleś mi roboty narobił... No nic. Ku radości. Skal!")
|
||||
async with ctx.typing():
|
||||
if check:
|
||||
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||
file_bytes = await ctx.message.attachments[0].read()
|
||||
text = file_bytes.decode(encoding=check.group(1))
|
||||
self.logger.info(text)
|
||||
lines = text.split("\n")
|
||||
for link in lines:
|
||||
link = link.strip()
|
||||
self.logger.info(link)
|
||||
pat = r"^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$"
|
||||
self.logger.info("Verification")
|
||||
if re.match(pat, link) and (
|
||||
re.match(".*youtube.*", link) or re.match(".*youtu.be.*", link)
|
||||
):
|
||||
self.logger.info("%s to link do jutuba", link)
|
||||
dir_path, files = await music_functions.get_file(
|
||||
ctx, "Youtube", link
|
||||
)
|
||||
if files:
|
||||
for file_iter in files:
|
||||
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||
MUZYKA["queue"].insert(0, file_iter)
|
||||
music_functions.MUSIC_FILE_LIST.update_file_list(
|
||||
file_iter
|
||||
)
|
||||
MUZYKA["requester"].insert(0, ctx.author)
|
||||
await ctx.send(f"Dodałem do listy {file_iter}")
|
||||
self.logger.info("Jutub udany")
|
||||
|
||||
elif re.match(pat, link) and re.match(".*spotify.*", link):
|
||||
self.logger.info("%s to link do spotify", link)
|
||||
dir_path, files = await music_functions.get_file(
|
||||
ctx, "Spotify", link
|
||||
)
|
||||
if platform == "win32":
|
||||
separator = "\\"
|
||||
else:
|
||||
separator = "/"
|
||||
for file in files:
|
||||
file_path = (
|
||||
dir_path
|
||||
+ separator
|
||||
+ file["artist"]
|
||||
+ " - "
|
||||
+ file["name"]
|
||||
+ ".mp3"
|
||||
)
|
||||
|
||||
MUZYKA["queue"].insert(
|
||||
0,
|
||||
dir_path
|
||||
+ separator
|
||||
+ file["artist"]
|
||||
+ " - "
|
||||
+ file["name"]
|
||||
+ ".mp3",
|
||||
)
|
||||
MUZYKA["requester"].insert(0, ctx.author)
|
||||
music_functions.MUSIC_FILE_LIST.update_file_list(file_path)
|
||||
await ctx.send(
|
||||
f"Dodałem do listy {dir_path}{file['artist']} - + {file['name']}.mp3"
|
||||
)
|
||||
self.logger.info("Spotifaj udany")
|
||||
|
||||
elif re.match(pat, link):
|
||||
self.logger.info("%s to link do czegos", link)
|
||||
sciezka, files = await music_functions.get_file(
|
||||
ctx, "Pornol", link
|
||||
)
|
||||
if files:
|
||||
self.logger.info("Pornol udany")
|
||||
await ctx.send(
|
||||
f"Jest w tajnym archiwum pod adresem{sciezka})"
|
||||
)
|
||||
|
||||
else:
|
||||
self.logger.info("Spierdalaj")
|
||||
self.logger.info(link)
|
||||
await ctx.message.reply("Spierdalaj")
|
||||
else:
|
||||
self.logger.info(content_type)
|
||||
self.logger.info("Spierdalaj")
|
||||
await ctx.message.reply("Spierdalaj")
|
||||
|
||||
async def disconnect(self, ctx):
|
||||
"""
|
||||
Asynchronous Python function that disconnects the voice client if it is connected and
|
||||
@@ -707,7 +803,7 @@ class MusicModule(commands.Cog):
|
||||
|
||||
async def setup(bot):
|
||||
logger = logging.getLogger("discord")
|
||||
music_functions.MUSIC_FILE_LIST.refresh_file_list()
|
||||
await music_functions.MUSIC_FILE_LIST.refresh_file_list(bot)
|
||||
logger.info("Playlist generation")
|
||||
await bot.add_cog(MusicModule(bot, "discord"))
|
||||
logger.info("Loading music commands module done")
|
||||
|
||||
+31
-4
@@ -5,6 +5,7 @@ import uuid
|
||||
from pathlib import Path, PurePath
|
||||
from sys import platform
|
||||
|
||||
import discord
|
||||
import requests
|
||||
|
||||
import yt_dlp
|
||||
@@ -28,13 +29,13 @@ class MusicFileList(object):
|
||||
file service or local directory and update the list with new items.
|
||||
"""
|
||||
|
||||
def __init__(self, uplogger) -> None:
|
||||
def __init__(self, uplogger,) -> None:
|
||||
self.music_file_list = []
|
||||
self.file_service_active = False
|
||||
self.logger = uplogger
|
||||
self.logger.info("Created Playlist organizer class")
|
||||
|
||||
def refresh_file_list(self):
|
||||
async def refresh_file_list(self, bot):
|
||||
"""
|
||||
The `refresh_file_list` function attempts to connect to a file service to retrieve a list of music
|
||||
files, and if unsuccessful, it populates the list by scanning a local directory for .mp3 files.
|
||||
@@ -50,9 +51,33 @@ class MusicFileList(object):
|
||||
if platform == "win32":
|
||||
temp_music_file = temp_music_file.replace("/", "\\")
|
||||
self.music_file_list.append(temp_music_file)
|
||||
self.file_service_active = False
|
||||
self.file_service_active = False
|
||||
self.logger.error(e.strerror)
|
||||
self.logger.error("Service Unavailable")
|
||||
finally:
|
||||
if self.file_service_active:
|
||||
self.logger.info("Radio Status: Probably Active")
|
||||
status = discord.Status.online
|
||||
# radio_hardkor = discord.Activity(
|
||||
# name = "Radio Hammer/Radio Conjurer/Wolne Bałuity Kurwa",
|
||||
# url = "http://95.175.16.246:666/mp3-stream",
|
||||
# type = discord.ActivityType.streaming,
|
||||
# platform = "Liquidsoap+RaspberyPi+RolandSeratoDJ202",
|
||||
# state = "Where the f*** is the DJ booth?",
|
||||
# details= "This Is Radio Hardkor based in Wolne Księstwo Bałuty, the best pirate radiostation on both sides of Łódka river",
|
||||
# buttons= [{"label":"RADIO", "url":"http://95.175.16.246:666/mp3-stream"}],
|
||||
# assets= {"large_image": "fuckery.jpg", "large_text":"Fuckewry", "small_image":"willowisp.png", "small_text":"Hi!"}
|
||||
# )
|
||||
radio_hardkor = discord.Streaming(
|
||||
name="Radio Hardkor", url="http://95.175.16.246:666/mp3-stream"
|
||||
)
|
||||
await bot.change_presence(status=status, activity=radio_hardkor)
|
||||
|
||||
else:
|
||||
self.logger.info("Radio Status: Rather Unknown")
|
||||
await bot.change_presence(
|
||||
activity=discord.Game(name="Axe Throwing Darts")
|
||||
)
|
||||
|
||||
def get_file_list(self):
|
||||
"""
|
||||
@@ -150,7 +175,9 @@ async def get_file(ctx, source, link):
|
||||
elif source == "Youtube":
|
||||
link_ok = False
|
||||
pat = r"^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$"
|
||||
if re.match(pat, link) and re.match(".*youtube.*", link):
|
||||
if re.match(pat, link) and (
|
||||
re.match(".*youtube.*", link) or re.match(".*youtu.be.*", link)
|
||||
):
|
||||
link_ok = True
|
||||
|
||||
if link_ok:
|
||||
|
||||
+6
-1
@@ -20,6 +20,7 @@ class OtherModule(commands.Cog):
|
||||
@commands.hybrid_command(
|
||||
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):
|
||||
"""
|
||||
Generate a text about hugging mentioned user.
|
||||
@@ -53,6 +54,7 @@ class OtherModule(commands.Cog):
|
||||
)
|
||||
|
||||
@commands.hybrid_command(name="fabryczka", description="Historia fabryczki")
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def fabryczka(self, ctx):
|
||||
"""
|
||||
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",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def reset_the_clock(self, ctx):
|
||||
"""
|
||||
Reset the clock on "accidents" in Hammer Fortress adding a new one.
|
||||
@@ -105,6 +108,7 @@ class OtherModule(commands.Cog):
|
||||
name="chata_hammera",
|
||||
description="Czas od ostatniego incydentu w AbsinthHammerTimeSpaceContinuum",
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def chata_hammera(self, ctx):
|
||||
"""
|
||||
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",
|
||||
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):
|
||||
"""
|
||||
Send a list of incidents in Hammer Fortress to the chat.
|
||||
@@ -149,12 +154,12 @@ class OtherModule(commands.Cog):
|
||||
index += 1
|
||||
await ctx.send(return_data)
|
||||
|
||||
# TODO: RADIO
|
||||
@commands.hybrid_command(
|
||||
name="radio_hardkor",
|
||||
description="Włącza radio Conjurer na kanale #nocna-zmiana.",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def radio_hardkor(self, ctx):
|
||||
"""
|
||||
Plays the radio hardkor stream in the voice channel.
|
||||
|
||||
+20
-2
@@ -26,7 +26,6 @@ async def async_iterator_generator(range_of_iterable):
|
||||
"""
|
||||
|
||||
|
||||
# TODO: OTHER
|
||||
async def remove_characters(string, character):
|
||||
"""
|
||||
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, "")
|
||||
|
||||
|
||||
# TODO: OTHER
|
||||
async def max_weight(lista):
|
||||
"""
|
||||
Take a list of weights and return the maximum weight.
|
||||
@@ -86,3 +84,23 @@ async def get_stats(client, ctx, history_limit):
|
||||
stats[word] = 1
|
||||
for name, how_many in stats.items():
|
||||
yield name, how_many
|
||||
|
||||
async def discord_friendly_reply(ctx, message_content, file=None):
|
||||
if len(message_content) < 999:
|
||||
await ctx.reply(message_content)
|
||||
else:
|
||||
while len(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):
|
||||
if len(message_content) < 999:
|
||||
await ctx.send(message_content)
|
||||
else:
|
||||
while len(message_content) > 999:
|
||||
await ctx.send(message_content[:999])
|
||||
message_content = message_content[999:]
|
||||
if file:
|
||||
await ctx.reply("Attachment:", file=file)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/Hallman/Hallman - 7 Bram/Niezłomność/Twardzi jak Stal/03-Forteca-1942.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/09. Świty Zmartwychwstania.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/Horytnica Czas Patriotów/Horytnica - Promo track CD 2011 Nie musimy umiera.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/08-Schmaletz-REWOLUCYJNA_NSZ(1).mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/schmaletz_-_nie_ma_fajnych_lasek_na_prawicy.mp3
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU - Lecimy ze Smoleńska z powrotem [f3CVfG4pV8M].mp3
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Anahata - Winged Hussars - Cover.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - 40#1 - Live, at Woodstock Festival.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Uprising - Live, at Woodstock Festival.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Inmate 4859.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Winged Hussars.m4a
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU Ada Karczmarczyk - Hej husarzu! ⧸ NIE_PODLE_głości dzień [SReTynvd6ek].mp3
|
||||
/home/pi/RetroPie/mp3/2023 Aug-Oct/Sabadu - A Very Polish Christmas.mp3
|
||||
/home/pi/RetroPie/mp3/2023 Aug-Oct/Sabadu - Mighty Polish Tank.mp3
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU - Nie chcę w lewo, nie chcę w prawo [J3Ok-KcbQ80].mp3
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - 40#1 - World War Tour 2010.m4a
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/01. Prolog.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/02. Honor Legionisty.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/07. Już Nie Musimy Umierać.mp3
|
||||
@@ -0,0 +1,46 @@
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - 40#1 - World War Tour 2010.m4a
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/08-Schmaletz-REWOLUCYJNA_NSZ(1).mp3
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU feat MATEJKO - Nie strzelam do zdrajców oczami [PGL6Q9G4_JM].mp3
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU - Lecimy ze Smoleńska z powrotem [f3CVfG4pV8M].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/Horytnica Czas Patriotów/Horytnica - Promo track CD 2011 Nie musimy umiera.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/01. Prolog.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/02. Honor Legionisty.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/03. Kraj Zdradzony.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/04. Mały Powstaniec.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/05. Lisowczycy.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/06. Śląski Rycerz.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/07. Już Nie Musimy Umierać.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/08. Sierp I Młot.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/09. Świty Zmartwychwstania.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/10. Katyńskie Łzy.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/11. Kochana Ma Polska.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/12. Słowiańska Armia Pracy.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/13. Pamięć I Duma.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2012/Głos Patriotów (2011) (Wirrrus)/14. Epilog.mp3
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Anahata - Winged Hussars - Cover.m4a
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU - Nie chcę w lewo, nie chcę w prawo [J3Ok-KcbQ80].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/Hallman/Hallman - 7 Bram/Niezłomność/Twardzi jak Stal/03-Forteca-1942.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/Forteca - Bagnet na broń.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/02-2 Forteca.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2013/SABATON-Metalus Hammerus Rex (djdariush)/40-1.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2014/Sabaton - Heroes (Deluxe Earbook Edition) 2014/CD1/04. Inmate 4859_[plixid.com].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - 1942.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - Apel poległych.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - BEZIMIEŃCOM.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - DZIŚ IDE WALCZYĆ MAMO.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - GNIEW.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - KATYŃ.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2010/Sabaton -2010- Coat Of Arms/03- Uprising.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/FORTECA - ORZEŁ BIAŁY.mp3
|
||||
/home/pi/RetroPie/mp3/2023 Aug-Oct/Sabadu - Mighty Polish Tank.mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/Dj. Celownik & Hallmann - O jau mano mielas [zapiska.pl].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/Dj.Celownik & Hallmann - Duma o Zakrzewskim [zapiska.pl].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/Dj.Celownik & Hallmann - Na lipe slowianska [zapiska.pl].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/Dj.Celownik & Hallmann - Piesn Legijonu Litewskiego [zapiska.pl].mp3
|
||||
/home/pi/RetroPie/mp3/Muzyka/2011/muza patriotyczna/08-Schmaletz-REWOLUCYJNA_NSZ(1).mp3
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - 40#1 - Live, at Woodstock Festival.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Uprising - Live, at Woodstock Festival.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Inmate 4859.m4a
|
||||
/home/pi/RetroPie/mp3/2022 Nov-Dec/Sabaton - Winged Hussars.m4a
|
||||
/home/pi/RetroPie/mp3/Youtube/ADU Ada Karczmarczyk - Hej husarzu! ⧸ NIE_PODLE_głości dzień [SReTynvd6ek].mp3
|
||||
/home/pi/RetroPie/mp3/2023 Aug-Oct/Sabadu - A Very Polish Christmas.mp3
|
||||
@@ -21,6 +21,7 @@ class RadioModule(commands.Cog):
|
||||
description="Przeskocz kawałek w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def skip_track(self, ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
@@ -45,6 +46,7 @@ class RadioModule(commands.Cog):
|
||||
description="Komenda ktora uruchamia radio ponownie jakby się zawiesiło",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def zrestartuj_radio(self, ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
@@ -68,6 +70,7 @@ class RadioModule(commands.Cog):
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
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.
|
||||
@@ -104,6 +107,7 @@ class RadioModule(commands.Cog):
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def request_radio(self, ctx):
|
||||
"""
|
||||
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",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def stworz_audycje(self, ctx):
|
||||
"""
|
||||
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",
|
||||
guild=discord.Object(id=664789470779932693),
|
||||
)
|
||||
@commands.has_any_role('Legenda', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def wyczysc_ulubione(self, ctx):
|
||||
"""
|
||||
Generate a playlist in queue. First word in this command shall be int defining length of the playlist.
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
[ {
|
||||
"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."
|
||||
},
|
||||
{
|
||||
"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", "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", "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", "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.", ""]
|
||||
|
||||
}
|
||||
]
|
||||
+13
@@ -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')
|
||||
]
|
||||
@@ -0,0 +1,4 @@
|
||||
let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentials.json")
|
||||
|
||||
output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream",input.alsa(bufferize=false))
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
let json.parse credentials = file.contents("/home/pi/Conjurer/icecast_credentials.json")
|
||||
|
||||
mic = buffer(input.pulseaudio())
|
||||
emergency = blank()
|
||||
mic = blank.strip(max_blank=10., min_noise=0.2, threshold=-30., mic)
|
||||
|
||||
|
||||
radio = fallback(id="switcher2", track_sensitive=false, [mic, emergency])
|
||||
|
||||
output.icecast(%mp3, host="retropie", port=8000, password=credentials.password, icy_metadata="true", mount="mp3-stream",radio)
|
||||
|
||||
+7
-5
@@ -27,6 +27,11 @@ intents.presences = True
|
||||
intents.members = True
|
||||
intents.messages = True
|
||||
intents.voice_states = True
|
||||
intents.moderation = True
|
||||
|
||||
# on_member_ban - wyswietl na glownym kanale pieczatke "Niech spierdala"
|
||||
# on_member_unban - "mam wyjebane"
|
||||
|
||||
logger = logging.getLogger("discord")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
handler = handlers.RotatingFileHandler(
|
||||
@@ -60,15 +65,12 @@ async def on_ready():
|
||||
await client.load_extension("other_commands")
|
||||
await client.load_extension("voice_recognition_commands")
|
||||
|
||||
|
||||
logger.info(client.cogs)
|
||||
await client.change_presence(activity=discord.Game(name="Axe Throwing Darts"))
|
||||
await client.tree.sync()
|
||||
for com in client.commands:
|
||||
logger.info("Command %s is awejleble", com.qualified_name)
|
||||
|
||||
|
||||
# TODO: ADMINISTRATION
|
||||
logger.info("Logged in as ---->", client.user)
|
||||
logger.info("ID:", client.user.id)
|
||||
|
||||
|
||||
# *================================== Run
|
||||
|
||||
@@ -161,6 +161,7 @@ class Transcriber(commands.Cog):
|
||||
self.logger = logging.getLogger("discord")
|
||||
|
||||
@commands.hybrid_command(name="transcribe")
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def test(self, ctx):
|
||||
if self.vc:
|
||||
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)
|
||||
|
||||
@commands.command(name="stop_transcribe")
|
||||
@commands.has_any_role('Nocna Zmiana', 'Jarl', 'Thane' , 'Bartender')
|
||||
async def stop(self, ctx):
|
||||
self.check_data.stop()
|
||||
stop_token = CommunicationObject("STOP", None, None)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 39 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
Reference in New Issue
Block a user