mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-16 14:52:11 +00:00
Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf27b2f3f9 | |||
| 4aa442a802 | |||
| 3964336370 | |||
| 625579ebbb | |||
| ed71f7871d | |||
| ff8d1abf8a | |||
| a74b18f62a | |||
| 323a1ac021 | |||
| 993b303e2f | |||
| 3b7248cb00 | |||
| e35e028001 | |||
| 2c19e4565e | |||
| 853e952128 | |||
| 041544917c | |||
| 3ed4dcfbb4 | |||
| 276e814515 | |||
| 5dd2aadd7c | |||
| 19fbd27f3a | |||
| 8deea0584c | |||
| 9f0fadf908 | |||
| d176b762f7 | |||
| 85d276f2d4 | |||
| b031bd9fdc | |||
| b3722deef2 | |||
| 961ca74c14 | |||
| 0f596cbdba | |||
| 85be1ce9fc | |||
| 5983439a5d | |||
| fd4c066008 | |||
| 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 |
@@ -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
|
||||||
@@ -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
@@ -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
@@ -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}")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
Executable
+38
@@ -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 ==="
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Run Check Raspberry Pi Parameters Script Hourly
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=hourly
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
@@ -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
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user