mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
T
This commit is contained in:
@@ -43,7 +43,6 @@ from spotify_dl import youtube as youtube_download
|
|||||||
Music_Config = TypedDict(
|
Music_Config = TypedDict(
|
||||||
"Music_Config",
|
"Music_Config",
|
||||||
{
|
{
|
||||||
"playing": bool,
|
|
||||||
"ctx": Optional[str],
|
"ctx": Optional[str],
|
||||||
"queue": List[str],
|
"queue": List[str],
|
||||||
"requester": List[str],
|
"requester": List[str],
|
||||||
@@ -54,7 +53,7 @@ Music_Config = TypedDict(
|
|||||||
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
|
||||||
MASTER_TIMEOUT = datetime.now()
|
MASTER_TIMEOUT = datetime.now()
|
||||||
INITIAL_TIME_WAIT = 5
|
INITIAL_TIME_WAIT = 5
|
||||||
MUZYKA: Music_Config = {"playing": False, "ctx": None, "queue": [], "requester": []}
|
MUZYKA: Music_Config = {"ctx": None, "queue": [], "requester": []}
|
||||||
|
|
||||||
LOGFILE = ""
|
LOGFILE = ""
|
||||||
NETRC_FILE = ""
|
NETRC_FILE = ""
|
||||||
@@ -72,6 +71,8 @@ FILE_SERVICE_ADDRESS = "http://192.168.1.15:5000"
|
|||||||
GET_MP3 = "/mp3"
|
GET_MP3 = "/mp3"
|
||||||
SEND_MP3 = "/update_mp3"
|
SEND_MP3 = "/update_mp3"
|
||||||
|
|
||||||
|
LAST_SPONTANEOUS_CALL = datetime.now()
|
||||||
|
|
||||||
# *=========================================== Platform Specific Predefines
|
# *=========================================== Platform Specific Predefines
|
||||||
|
|
||||||
if platform in ("linux", "linux2"):
|
if platform in ("linux", "linux2"):
|
||||||
@@ -357,7 +358,7 @@ async def on_message(message):
|
|||||||
global MESSAGE_TABLE # pylint: disable=global-statement
|
global MESSAGE_TABLE # pylint: disable=global-statement
|
||||||
|
|
||||||
result, MESSAGE_TABLE = await handle_response(
|
result, MESSAGE_TABLE = await handle_response(
|
||||||
prompt, vykidailo, bartender, MESSAGE_TABLE, username, False
|
prompt, vykidailo, bartender, MESSAGE_TABLE, username, "CONVERSATION"
|
||||||
)
|
)
|
||||||
await message.reply(result)
|
await message.reply(result)
|
||||||
if "imaginuje sobie:" in message.content:
|
if "imaginuje sobie:" in message.content:
|
||||||
@@ -540,7 +541,7 @@ async def play(ctx, zamawial=None, arg=None):
|
|||||||
username = ctx.message.author.name
|
username = ctx.message.author.name
|
||||||
global MESSAGE_TABLE # pylint: disable=global-statement
|
global MESSAGE_TABLE # pylint: disable=global-statement
|
||||||
result, MESSAGE_TABLE = await handle_response(
|
result, MESSAGE_TABLE = await handle_response(
|
||||||
query, vykidailo, bartender, message_table_muzyka, username, True
|
query, vykidailo, bartender, message_table_muzyka, username, "MUSIC"
|
||||||
)
|
)
|
||||||
logger.debug("Obecna historia czatu: %s", message_table_muzyka)
|
logger.debug("Obecna historia czatu: %s", message_table_muzyka)
|
||||||
await ctx.send(result)
|
await ctx.send(result)
|
||||||
@@ -573,15 +574,9 @@ async def check_music():
|
|||||||
"""
|
"""
|
||||||
if client.voice_clients:
|
if client.voice_clients:
|
||||||
voice_client = client.voice_clients[0]
|
voice_client = client.voice_clients[0]
|
||||||
if voice_client.is_connected():
|
if voice_client and voice_client.is_connected() and not voice_client.is_playing() and not voice_client.is_paused():
|
||||||
while MUZYKA["playing"] and voice_client.is_connected():
|
await play(MUZYKA["ctx"], MUZYKA["requester"])
|
||||||
if (
|
await asyncio.sleep(2)
|
||||||
voice_client
|
|
||||||
and not voice_client.is_playing()
|
|
||||||
and not voice_client.is_paused()
|
|
||||||
):
|
|
||||||
await play(MUZYKA["ctx"], MUZYKA["requester"])
|
|
||||||
await asyncio.sleep(1)
|
|
||||||
|
|
||||||
|
|
||||||
@tasks.loop(minutes=2)
|
@tasks.loop(minutes=2)
|
||||||
@@ -590,21 +585,20 @@ async def check_data():
|
|||||||
The function `check_data` periodically checks for conditions to send messages and manage log files
|
The function `check_data` periodically checks for conditions to send messages and manage log files
|
||||||
in a Discord channel.
|
in a Discord channel.
|
||||||
"""
|
"""
|
||||||
last_spontaneous_call = datetime.now()
|
|
||||||
tdelta = datetime.now() - last_spontaneous_call
|
|
||||||
tdelta = tdelta.total_seconds()
|
|
||||||
if tdelta > 34000:
|
|
||||||
channel = client.get_channel(1062047571557744721)
|
|
||||||
last_spontaneous_call = datetime.now()
|
|
||||||
with channel.typing():
|
|
||||||
message = get_random_cyclic_message()
|
|
||||||
await channel.send(message)
|
|
||||||
# trunk-ignore(codespell/misspelled)
|
# trunk-ignore(codespell/misspelled)
|
||||||
# TODO: dlaczego sie tu wypierdala
|
# TODO: dlaczego sie tu wypierdala
|
||||||
if os.path.getsize(LOGFILE) > 6000000:
|
if os.path.getsize(LOGFILE) > 6000000:
|
||||||
shutil.copyfile(LOGFILE, f"{LOGSTORE}discord{datetime.now()}")
|
channel = client.get_channel(1062047571557744721)
|
||||||
logger.info("Log rollover")
|
await channel.send(
|
||||||
handler.doRollover()
|
"*Conjurer porządkuje bar, wypala szklanki do czysta miotaczem płomieni ze swojej zbroi i ogólnie wygląda na zajętego....*"
|
||||||
|
)
|
||||||
|
with channel.typing():
|
||||||
|
shutil.copyfile(LOGFILE, f"{LOGSTORE}discord{datetime.now()}")
|
||||||
|
logger.info("Log rollover")
|
||||||
|
handler.doRollover()
|
||||||
|
await channel.send(
|
||||||
|
"*Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* ...sać powieści o naszym wspaniałym barze SZEFIE!"
|
||||||
|
)
|
||||||
|
|
||||||
if os.path.getsize(MEMORY_FIVE_MUZYKA) > 300000:
|
if os.path.getsize(MEMORY_FIVE_MUZYKA) > 300000:
|
||||||
channel = client.get_channel(1062047571557744721)
|
channel = client.get_channel(1062047571557744721)
|
||||||
@@ -648,7 +642,15 @@ async def check_data():
|
|||||||
await channel.send(
|
await channel.send(
|
||||||
"*Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* eprzyć o głupotach z klientami... Szefie... *Bierze 'ukradkowy' łyk z piersiówki*"
|
"*Przeciąga się za barem* No dobra - porobione to można dalej pi... *Zauważa spojrzenie Hammera* eprzyć o głupotach z klientami... Szefie... *Bierze 'ukradkowy' łyk z piersiówki*"
|
||||||
)
|
)
|
||||||
await asyncio.sleep(60)
|
global LAST_SPONTANEOUS_CALL
|
||||||
|
tdelta = LAST_SPONTANEOUS_CALL - datetime.now()
|
||||||
|
tdelta = tdelta.total_seconds()
|
||||||
|
if tdelta > 12:
|
||||||
|
channel = client.get_channel(1062047571557744721)
|
||||||
|
LAST_SPONTANEOUS_CALL = datetime.now()
|
||||||
|
with channel.typing():
|
||||||
|
message = get_random_cyclic_message()
|
||||||
|
await channel.send(message)
|
||||||
|
|
||||||
|
|
||||||
async def get_random_cyclic_message():
|
async def get_random_cyclic_message():
|
||||||
@@ -657,11 +659,34 @@ async def get_random_cyclic_message():
|
|||||||
words.
|
words.
|
||||||
:return: a random cyclic message from the list `cyclic_words`.
|
:return: a random cyclic message from the list `cyclic_words`.
|
||||||
"""
|
"""
|
||||||
messnum = random.randint(0, len(cyclic_words) - 1)
|
ai_check = random.randint(0,10)
|
||||||
return cyclic_words[messnum][0]
|
logger.info("Losowa wypowiedź")
|
||||||
|
if ai_check < 0:
|
||||||
|
logger.info("Predefiniowana")
|
||||||
|
messnum = random.randint(0, len(cyclic_words) - 1)
|
||||||
|
return cyclic_words[messnum][0]
|
||||||
|
ai_check2 = random.randint(0,10)
|
||||||
|
global MESSAGE_TABLE
|
||||||
|
if ai_check2 > 4:
|
||||||
|
logger.info("Dykteryjka")
|
||||||
|
result, MESSAGE_TABLE = await handle_response(
|
||||||
|
"Opowiedz jakąś historię o naszym barze proszę", True, True, MESSAGE_TABLE, "Polish Hammer", "RANDOM"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
channel_id = 1062047367337095268
|
||||||
|
channel = client.get_channel(channel_id)
|
||||||
|
logger.info("Wtracenie sie w dyskusje")
|
||||||
|
messages = [message async for message in channel.history(limit=50)]
|
||||||
|
for message in messages:
|
||||||
|
temp = {"role": "user", "content": message.author + ":" + message.content}
|
||||||
|
MESSAGE_TABLE.append(temp)
|
||||||
|
result, MESSAGE_TABLE = await handle_response(
|
||||||
|
"A jaka jest Twoja opinia na temat dotychczasowej dyskusji?", True, True, MESSAGE_TABLE, "Polish Hammer", "RANDOM"
|
||||||
|
)
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
async def handle_response(prompt, vykidailo, bartender, history, username, music):
|
async def handle_response(prompt, vykidailo, bartender, history, username, request_type):
|
||||||
"""
|
"""
|
||||||
Handle responses by appending them to a history, use OpenAI to
|
Handle responses by appending them to a history, use OpenAI to
|
||||||
generate a response, and then append the generated response to the history.
|
generate a response, and then append the generated response to the history.
|
||||||
@@ -684,7 +709,7 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music
|
|||||||
if vykidailo or bartender:
|
if vykidailo or bartender:
|
||||||
logger.info("Administrator coś chciał")
|
logger.info("Administrator coś chciał")
|
||||||
history.append(temp)
|
history.append(temp)
|
||||||
if music:
|
if request_type == "MUSIC":
|
||||||
with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file_music_memory:
|
with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file_music_memory:
|
||||||
# First we load existing data into a dict.
|
# First we load existing data into a dict.
|
||||||
file_data = json.load(file_music_memory)
|
file_data = json.load(file_music_memory)
|
||||||
@@ -693,6 +718,15 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music
|
|||||||
file_music_memory.seek(0)
|
file_music_memory.seek(0)
|
||||||
# convert back to json.
|
# convert back to json.
|
||||||
json.dump(file_data, file_music_memory, indent=4)
|
json.dump(file_data, file_music_memory, indent=4)
|
||||||
|
elif request_type == "RANDOM":
|
||||||
|
with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory:
|
||||||
|
# First we load existing data into a dict.
|
||||||
|
file_data = json.load(file_memory)
|
||||||
|
# Join new_data with file_data inside emp_details
|
||||||
|
file_data.append(temp)
|
||||||
|
file_memory.seek(0)
|
||||||
|
# convert back to json.
|
||||||
|
json.dump(file_data, file_memory, indent=4)
|
||||||
else:
|
else:
|
||||||
with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory:
|
with open(MEMORY_FIVE_SIARA, "r+", encoding=ENCODING) as file_memory:
|
||||||
# First we load existing data into a dict.
|
# First we load existing data into a dict.
|
||||||
@@ -722,10 +756,14 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music
|
|||||||
logger.info(
|
logger.info(
|
||||||
"Rozmiar zapytania przed dodaniem historii %s", chat_gpt_config_request_size
|
"Rozmiar zapytania przed dodaniem historii %s", chat_gpt_config_request_size
|
||||||
)
|
)
|
||||||
if music:
|
if request_type == "MUSIC":
|
||||||
algorithm = "gpt-3.5-turbo-0125"
|
algorithm = "gpt-3.5-turbo-0125"
|
||||||
table = message_table_muzyka
|
table = message_table_muzyka
|
||||||
token_amount = 10700
|
token_amount = 10700
|
||||||
|
elif request_type == "RANDOM":
|
||||||
|
algorithm = "gpt-3.5-turbo-0125"
|
||||||
|
table = MESSAGE_TABLE
|
||||||
|
token_amount = 10700
|
||||||
else:
|
else:
|
||||||
table = MESSAGE_TABLE
|
table = MESSAGE_TABLE
|
||||||
algorithm = "gpt-4"
|
algorithm = "gpt-4"
|
||||||
@@ -770,7 +808,7 @@ async def handle_response(prompt, vykidailo, bartender, history, username, music
|
|||||||
logger.info(result)
|
logger.info(result)
|
||||||
temp = {"role": "assistant", "content": result}
|
temp = {"role": "assistant", "content": result}
|
||||||
history.append(temp)
|
history.append(temp)
|
||||||
if music:
|
if request_type:
|
||||||
with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file:
|
with open(MEMORY_FIVE_MUZYKA, "r+", encoding=ENCODING) as file:
|
||||||
# First we load existing data into a dict.
|
# First we load existing data into a dict.
|
||||||
file_data = json.load(file)
|
file_data = json.load(file)
|
||||||
@@ -1337,7 +1375,6 @@ async def graj_muzyko(ctx):
|
|||||||
logger.info("Press play on tape")
|
logger.info("Press play on tape")
|
||||||
async with ctx.typing():
|
async with ctx.typing():
|
||||||
global MUZYKA # pylint: disable=global-variable-not-assigned
|
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||||
MUZYKA["playing"] = True
|
|
||||||
MUZYKA["ctx"] = ctx
|
MUZYKA["ctx"] = ctx
|
||||||
await connect(ctx=ctx)
|
await connect(ctx=ctx)
|
||||||
await play(ctx=ctx)
|
await play(ctx=ctx)
|
||||||
@@ -1361,7 +1398,6 @@ async def cisza(ctx):
|
|||||||
"""
|
"""
|
||||||
logger.info("Stop")
|
logger.info("Stop")
|
||||||
global MUZYKA # pylint: disable=global-variable-not-assigned
|
global MUZYKA # pylint: disable=global-variable-not-assigned
|
||||||
MUZYKA["playing"] = False
|
|
||||||
MUZYKA["ctx"] = None
|
MUZYKA["ctx"] = None
|
||||||
voice_client = client.voice_clients[0]
|
voice_client = client.voice_clients[0]
|
||||||
check_music.stop()
|
check_music.stop()
|
||||||
|
|||||||
@@ -97,8 +97,8 @@ def write_tracks(tracks_file, song_dict):
|
|||||||
def set_tags(temp, filename, kwargs):
|
def set_tags(temp, filename, kwargs):
|
||||||
"""
|
"""
|
||||||
sets song tags after they are downloaded
|
sets song tags after they are downloaded
|
||||||
:param temp: contains index used to obtain more info about song being editted
|
:param temp: contains index used to obtain more info about song being edited
|
||||||
:param filename: location of song whose tags are to be editted
|
:param filename: location of song whose tags are to be edited
|
||||||
:param kwargs: a dictionary of extra arguments to be used in tag editing
|
:param kwargs: a dictionary of extra arguments to be used in tag editing
|
||||||
"""
|
"""
|
||||||
song = kwargs["track_db"][int(temp[-1])]
|
song = kwargs["track_db"][int(temp[-1])]
|
||||||
|
|||||||
Reference in New Issue
Block a user