mirror of
https://github.com/migatu/conjurer.git
synced 2026-07-14 21:38:38 +00:00
Changes for too long messages handling
This commit is contained in:
@@ -16,10 +16,10 @@ import os
|
||||
import random
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import threading
|
||||
import uuid
|
||||
import subprocess
|
||||
from datetime import datetime
|
||||
from logging import handlers
|
||||
from pathlib import Path, PurePath
|
||||
@@ -42,11 +42,15 @@ from discord.ext import commands, tasks
|
||||
from spotipy.oauth2 import SpotifyClientCredentials
|
||||
|
||||
import yt_dlp
|
||||
from communication_subroutine import (
|
||||
IN_COMM_Q,
|
||||
OUT_COMM_Q,
|
||||
QueryControl,
|
||||
comm_subroutine,
|
||||
)
|
||||
from spotify_dl import spotify
|
||||
from spotify_dl import youtube as youtube_download
|
||||
|
||||
from communication_subroutine import comm_subroutine, IN_COMM_Q, OUT_COMM_Q, QueryControl
|
||||
|
||||
# *=========================== Classes definition
|
||||
|
||||
# The above code is defining a TypedDict called `Music_Config` in Python. This TypedDict has three
|
||||
@@ -63,7 +67,6 @@ Music_Config = TypedDict(
|
||||
)
|
||||
|
||||
|
||||
|
||||
class MusicFileList(object):
|
||||
"""
|
||||
The `MusicFileList` class manages a list of music files, with the ability to refresh the list from a
|
||||
@@ -284,7 +287,6 @@ for key in word_reactions:
|
||||
logger.info("Done")
|
||||
|
||||
|
||||
|
||||
# *=========================================== Create Client
|
||||
logger.info("Creating discord bot")
|
||||
client = commands.Bot(intents=intents, command_prefix="$")
|
||||
@@ -404,7 +406,13 @@ async def on_message(message):
|
||||
result, MESSAGE_TABLE = await handle_response(
|
||||
prompt, vykidailo, bartender, MESSAGE_TABLE, username, "CONVERSATION"
|
||||
)
|
||||
await message.reply(result)
|
||||
|
||||
if len(result) < 1500:
|
||||
await message.reply(result)
|
||||
else:
|
||||
while len(result) > 1500:
|
||||
await message.reply(result[:1500])
|
||||
result = result[1500:]
|
||||
if "imaginuje sobie:" in message.content:
|
||||
async with channel.typing():
|
||||
logger.info("Poczatek procedury obrazkowej")
|
||||
@@ -637,7 +645,12 @@ async def play(ctx, zamawial=None, arg=None):
|
||||
query, vykidailo, bartender, message_table_muzyka, username, "MUSIC"
|
||||
)
|
||||
logger.debug("Obecna historia czatu: %s", message_table_muzyka)
|
||||
await ctx.send(result)
|
||||
if len(result) < 1500:
|
||||
await ctx.send(result)
|
||||
else:
|
||||
while len(result) > 1500:
|
||||
await ctx.send(result[:1500])
|
||||
result = result[1500:]
|
||||
|
||||
|
||||
async def archive_channel(channel_no):
|
||||
@@ -676,6 +689,7 @@ async def check_music():
|
||||
await play(MUZYKA["ctx"], MUZYKA["requester"])
|
||||
await asyncio.sleep(2)
|
||||
|
||||
|
||||
@tasks.loop(seconds=3)
|
||||
async def check_data_q():
|
||||
"""
|
||||
@@ -691,40 +705,42 @@ async def check_data_q():
|
||||
for doi in fresh_data.entries:
|
||||
logger.info(doi)
|
||||
desc = fresh_data.entries[doi]
|
||||
title = desc['Title'][0]
|
||||
entries.append(f"{l_p}. {title} pod linkiem https://www.sci-hub.se/{doi} i jest to {desc['type']}\n")
|
||||
l_p+=1
|
||||
message = '*Z podłogi wysuwa się winda na książki*'
|
||||
title = desc["Title"][0]
|
||||
entries.append(
|
||||
f"{l_p}. {title} pod linkiem https://www.sci-hub.se/{doi} i jest to {desc['type']}\n"
|
||||
)
|
||||
l_p += 1
|
||||
message = "*Z podłogi wysuwa się winda na książki*"
|
||||
if fresh_data.ctx is not None:
|
||||
ctx = fresh_data.ctx
|
||||
message += f' Dzielny poszukiwaczu @{searcher} w odpowiedzi na twoje zapytanie {query} nr {fresh_data.uuid}'
|
||||
message += f" Dzielny poszukiwaczu @{searcher} w odpowiedzi na twoje zapytanie {query} nr {fresh_data.uuid}"
|
||||
else:
|
||||
ctx = client.get_channel(1062047571557744721)
|
||||
message += f' Mam wynik dla zapytania {fresh_data.uuid} ale że Hammer coś grzebał nie pamiętam kto to chciał i co chciał'
|
||||
message += f" Mam wynik dla zapytania {fresh_data.uuid} ale że Hammer coś grzebał nie pamiętam kto to chciał i co chciał"
|
||||
|
||||
|
||||
message += 'nasza biblioteka służy Ci odpowiedzią. Przy dźwięku fanfar winda się otwiera a w środku '
|
||||
if len(entries)<1:
|
||||
message += "nasza biblioteka służy Ci odpowiedzią. Przy dźwięku fanfar winda się otwiera a w środku "
|
||||
if len(entries) < 1:
|
||||
message += "niestety nie ma nic"
|
||||
await ctx.send(message)
|
||||
elif len(entries)>=1 and len(entries)<5:
|
||||
elif len(entries) >= 1 and len(entries) < 5:
|
||||
message += " znajduje się coś:\n"
|
||||
for item in entries:
|
||||
message+=item
|
||||
message += item
|
||||
await ctx.send(message)
|
||||
else:
|
||||
message+= " znajduje się cholernie dużo:\n"
|
||||
message += " znajduje się cholernie dużo:\n"
|
||||
for item in entries:
|
||||
message+=item
|
||||
message += item
|
||||
if len(message) > 1500:
|
||||
await ctx.send(message)
|
||||
message = ""
|
||||
|
||||
#Kept for sentimental reasons
|
||||
#await ctx.send(f"O. A tak będzie wyglądało coś ciekawego w przyszłości: {data}")
|
||||
# Kept for sentimental reasons
|
||||
# await ctx.send(f"O. A tak będzie wyglądało coś ciekawego w przyszłości: {data}")
|
||||
except Empty:
|
||||
pass
|
||||
|
||||
|
||||
@tasks.loop(seconds=120)
|
||||
async def check_self():
|
||||
"""
|
||||
@@ -1082,9 +1098,13 @@ async def get_file(ctx, source, link):
|
||||
logger.info(item_type)
|
||||
logger.info(item_id)
|
||||
logger.info("Spotify link provided")
|
||||
file_list = await asyncio.to_thread(spotify.fetch_tracks, spotify_ctrl, item_type, link)
|
||||
file_list = await asyncio.to_thread(
|
||||
spotify.fetch_tracks, spotify_ctrl, item_type, link
|
||||
)
|
||||
logger.info(file_list)
|
||||
directory_name = await asyncio.to_thread(spotify.get_item_name, spotify_ctrl, item_type, item_id)
|
||||
directory_name = await asyncio.to_thread(
|
||||
spotify.get_item_name, spotify_ctrl, item_type, item_id
|
||||
)
|
||||
logger.info(directory_name)
|
||||
logger.info("Spotify scrape done")
|
||||
url_data = {"urls": []}
|
||||
@@ -1351,6 +1371,7 @@ async def max_weight(lista):
|
||||
|
||||
# *=========================================== Define Commands
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="skip_track",
|
||||
description="Przeskocz kawałek w radiu",
|
||||
@@ -1360,15 +1381,15 @@ async def skip_track(ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
for role in ctx.author.roles:
|
||||
if role.name in ("Thane","Jarl"):
|
||||
if role.name in ("Thane", "Jarl"):
|
||||
allowed = True
|
||||
if not allowed:
|
||||
await ctx.send("Łapy precz od radia")
|
||||
else:
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.get,
|
||||
f"{RADIO_HARBOR_ADDRESS}{SKIP_TRACK}",
|
||||
timeout=360,
|
||||
requests.get,
|
||||
f"{RADIO_HARBOR_ADDRESS}{SKIP_TRACK}",
|
||||
timeout=360,
|
||||
)
|
||||
result = await coroutine
|
||||
logger.info("Done %s", result)
|
||||
@@ -1384,13 +1405,19 @@ async def zrestartuj_radio(ctx):
|
||||
async with ctx.typing():
|
||||
allowed = False
|
||||
for role in ctx.author.roles:
|
||||
if role.name in ("Thane","Jarl"):
|
||||
if role.name in ("Thane", "Jarl"):
|
||||
allowed = True
|
||||
if not allowed:
|
||||
await ctx.send("Łapy precz od radia")
|
||||
else:
|
||||
retcode = subprocess.run("/home/pi/Conjurer/restart_radio.sh", shell=False, check = False, capture_output = True)
|
||||
logger.info("Wynik: %s",retcode)
|
||||
retcode = subprocess.run(
|
||||
"/home/pi/Conjurer/restart_radio.sh",
|
||||
shell=False,
|
||||
check=False,
|
||||
capture_output=True,
|
||||
)
|
||||
logger.info("Wynik: %s", retcode)
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="dej_co_ze_spotifaja",
|
||||
@@ -1633,6 +1660,7 @@ async def graj_muzyko(ctx):
|
||||
logger.info("Press play on tape completed")
|
||||
check_music.start()
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="radio_hardkor",
|
||||
description="Włącza radio Conjurer na kanale #nocna-zmiana.",
|
||||
@@ -1657,9 +1685,10 @@ async def radio_hardkor(ctx):
|
||||
voice_client = client.voice_clients[0]
|
||||
voice_client.play(
|
||||
discord.PCMVolumeTransformer(
|
||||
discord.FFmpegPCMAudio("http://95.175.16.246:666/mp3-stream"), volume=0.3
|
||||
)
|
||||
discord.FFmpegPCMAudio("http://95.175.16.246:666/mp3-stream"),
|
||||
volume=0.3,
|
||||
)
|
||||
)
|
||||
logger.info("Press play on radio completed")
|
||||
else:
|
||||
logger.error("Already playing")
|
||||
@@ -1667,7 +1696,6 @@ async def radio_hardkor(ctx):
|
||||
check_music.start()
|
||||
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="cisza",
|
||||
description="Wyłącza muzykę i czyści plejliste.",
|
||||
@@ -1810,6 +1838,7 @@ async def zagraj_mi_kawalek(ctx):
|
||||
"Obawiam się że nie mogę nic znaleźć u siebie. Spróbuj komendy '$dej_co_ze_spotifaja' jeśli masz link"
|
||||
)
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="dodaj_do_ulubionych",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
@@ -1844,6 +1873,8 @@ async def dodaj_do_ulubionych(ctx):
|
||||
result = await coroutine
|
||||
logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="ja_chciol",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
@@ -1877,6 +1908,7 @@ async def request_radio(ctx):
|
||||
logger.info("Done %s", result)
|
||||
await ctx.send("Zrobione szefie!")
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="stworz_audycje",
|
||||
description="Dodaje do listy ulubionych w radiu",
|
||||
@@ -2316,11 +2348,18 @@ async def wyszukaj_linki_do_dokumentow(ctx):
|
||||
"""
|
||||
query = ctx.message.content
|
||||
query_uuid = uuid.uuid4()
|
||||
#TODO: TESTING ONLY!!
|
||||
#query_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
|
||||
ctx.message.content = ctx.message.content.replace("$wyszukaj_linki_do_dokumentow", "")
|
||||
# TODO: TESTING ONLY!!
|
||||
# query_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
|
||||
ctx.message.content = ctx.message.content.replace(
|
||||
"$wyszukaj_linki_do_dokumentow", ""
|
||||
)
|
||||
|
||||
json_query = {"UUID": str(query_uuid), "query": str(query), "page": 1, "deep_search": False}
|
||||
json_query = {
|
||||
"UUID": str(query_uuid),
|
||||
"query": str(query),
|
||||
"page": 1,
|
||||
"deep_search": False,
|
||||
}
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.post,
|
||||
f"{LIBRARIAN_SERVICE_ADDRESS}{SEND_QUERY}",
|
||||
@@ -2328,14 +2367,16 @@ async def wyszukaj_linki_do_dokumentow(ctx):
|
||||
timeout=360,
|
||||
)
|
||||
await ctx.send(
|
||||
"*Conjurer powoli notuje podane przez Ciebie. Podchodzi do sprytnie ukrytej przy barze rury od poczty pneumatycznej i" +
|
||||
" wrzuca twój liścik do środka* To teraz trza poczekać kilka godzin. Biblioteka to 3/4 stacji."+
|
||||
" A przecież pół stacji to browar, motelik dla zabaw cielesnych i ten Bar. Więc 12/8 stacji teraz będzie ciężko pracować"
|
||||
"*Conjurer powoli notuje podane przez Ciebie. Podchodzi do sprytnie ukrytej przy barze rury od poczty pneumatycznej i"
|
||||
+ " wrzuca twój liścik do środka* To teraz trza poczekać kilka godzin. Biblioteka to 3/4 stacji."
|
||||
+ " A przecież pół stacji to browar, motelik dla zabaw cielesnych i ten Bar. Więc 12/8 stacji teraz będzie ciężko pracować"
|
||||
)
|
||||
query_response = await coroutine
|
||||
if not query_response.status_code == 200:
|
||||
await ctx.send("*Z rury wydobywa się dym. Conjurer łapie pierwszą ciecz pod ręką i pryska na rurę. Następuje drobna eksplozja i wszystko zaczyna się palić."+
|
||||
" Conjurer jest skonfundowany..* Wołaj szefa - mam nieodparte wrażenie że się coś wyjebało")
|
||||
await ctx.send(
|
||||
"*Z rury wydobywa się dym. Conjurer łapie pierwszą ciecz pod ręką i pryska na rurę. Następuje drobna eksplozja i wszystko zaczyna się palić."
|
||||
+ " Conjurer jest skonfundowany..* Wołaj szefa - mam nieodparte wrażenie że się coś wyjebało"
|
||||
)
|
||||
return
|
||||
|
||||
query, query_uuid, queue_size = (
|
||||
@@ -2349,8 +2390,11 @@ async def wyszukaj_linki_do_dokumentow(ctx):
|
||||
username = ctx.message.author.name
|
||||
query_object = QueryControl(username, query_uuid, query, logger, ctx)
|
||||
OUT_COMM_Q.put(query_object)
|
||||
await ctx.send(f"No dobra poszło. Zapamiętaj proszę {query_uuid} - to identyfikator twojego zapytania. Jesteś {queue_size} w kolejce."+
|
||||
" 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.")
|
||||
await ctx.send(
|
||||
f"No dobra poszło. Zapamiętaj proszę {query_uuid} - to identyfikator twojego zapytania. Jesteś {queue_size} w kolejce."
|
||||
+ " 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."
|
||||
)
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
name="glebokie_gardlo",
|
||||
@@ -2394,13 +2438,23 @@ async def wyszukaj_linki_do_dokumentow_deep(ctx):
|
||||
result, MESSAGE_TABLE = await handle_response(
|
||||
prompt, vykidailo, bartender, MESSAGE_TABLE, username, "CONVERSATION"
|
||||
)
|
||||
await ctx.send(result)
|
||||
if len(result) < 1500:
|
||||
await ctx.send(result)
|
||||
else:
|
||||
while len(result) > 1500:
|
||||
await ctx.send(result[:1500])
|
||||
result = result[1500:]
|
||||
return
|
||||
|
||||
query_uuid = uuid.uuid4()
|
||||
#TODO: TESTING ONLY!!
|
||||
#query_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
|
||||
json_query = {"UUID": str(query_uuid), "query": str(query), "page": 1, "deep_search": True}
|
||||
# TODO: TESTING ONLY!!
|
||||
# query_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
|
||||
json_query = {
|
||||
"UUID": str(query_uuid),
|
||||
"query": str(query),
|
||||
"page": 1,
|
||||
"deep_search": True,
|
||||
}
|
||||
coroutine = asyncio.to_thread(
|
||||
requests.post,
|
||||
f"{LIBRARIAN_SERVICE_ADDRESS}{SEND_QUERY}",
|
||||
@@ -2408,14 +2462,16 @@ async def wyszukaj_linki_do_dokumentow_deep(ctx):
|
||||
timeout=360,
|
||||
)
|
||||
await ctx.send(
|
||||
"*Conjurer mruga okiem i zamiast drinka wyjmuje dysk usb z terminala. Podchodzi do sprytnie ukrytej przy barze rury od poczty pneumatycznej i" +
|
||||
" wrzuca ten dysk do środk* To teraz trza poczekać kilka godzin. TO będzie głębokie wyszukanie"+
|
||||
" Rozgląda się dookoła i stawia przed tobą mętnego drinka o zapachu mięty, gwiezdnego pyłu i oleju silnikowego"
|
||||
"*Conjurer mruga okiem i zamiast drinka wyjmuje dysk usb z terminala. Podchodzi do sprytnie ukrytej przy barze rury od poczty pneumatycznej i"
|
||||
+ " wrzuca ten dysk do środk* To teraz trza poczekać kilka godzin. TO będzie głębokie wyszukanie"
|
||||
+ " Rozgląda się dookoła i stawia przed tobą mętnego drinka o zapachu mięty, gwiezdnego pyłu i oleju silnikowego"
|
||||
)
|
||||
query_response = await coroutine
|
||||
if not query_response.status_code == 200:
|
||||
await ctx.send("*Z rury wydobywa się dym. Conjurer łapie pierwszą ciecz pod ręką i pryska na rurę. Następuje drobna eksplozja i wszystko zaczyna się palić."+
|
||||
" Conjurer jest skonfundowany..* Wołaj szefa - mam nieodparte wrażenie że się coś wyjebało")
|
||||
await ctx.send(
|
||||
"*Z rury wydobywa się dym. Conjurer łapie pierwszą ciecz pod ręką i pryska na rurę. Następuje drobna eksplozja i wszystko zaczyna się palić."
|
||||
+ " Conjurer jest skonfundowany..* Wołaj szefa - mam nieodparte wrażenie że się coś wyjebało"
|
||||
)
|
||||
return
|
||||
|
||||
query, query_uuid, queue_size = (
|
||||
@@ -2429,9 +2485,10 @@ async def wyszukaj_linki_do_dokumentow_deep(ctx):
|
||||
username = ctx.message.author.name
|
||||
query_object = QueryControl(username, query_uuid, query, logger, ctx)
|
||||
OUT_COMM_Q.put(query_object)
|
||||
await ctx.send(f"Wypij wypi {query_uuid} - to identyfikator twojego zapytania. Jesteś {queue_size} w kolejce niestety kolejka obowiazuje zawsze."+
|
||||
" Zapytania obsługuje algorytm zasilany czterema chomikami zapierdalającymi w kołowrotku - więc wyniki najwcześniej za kilka godzin - ale mogą być też dni. Głębokie zabawy trwają dłużej. *Znowu mruga*")
|
||||
|
||||
await ctx.send(
|
||||
f"Wypij wypi {query_uuid} - to identyfikator twojego zapytania. Jesteś {queue_size} w kolejce niestety kolejka obowiazuje zawsze."
|
||||
+ " Zapytania obsługuje algorytm zasilany czterema chomikami zapierdalającymi w kołowrotku - więc wyniki najwcześniej za kilka godzin - ale mogą być też dni. Głębokie zabawy trwają dłużej. *Znowu mruga*"
|
||||
)
|
||||
|
||||
|
||||
@client.hybrid_command(
|
||||
@@ -2468,7 +2525,6 @@ async def krecimy_pornola(ctx):
|
||||
ctx.reply("Jak ładnie szefa poprosisz.")
|
||||
|
||||
|
||||
|
||||
# *================================== Run
|
||||
if __name__ == "__main__":
|
||||
logger.info("Starting discord bot")
|
||||
@@ -2479,12 +2535,12 @@ if __name__ == "__main__":
|
||||
logger.info("Starting discord bot: Starting threads")
|
||||
WRK_CNT = 0
|
||||
for worker in threads:
|
||||
WRK_CNT+=1
|
||||
WRK_CNT += 1
|
||||
logger.info("Starting discord bot: Starting thread %s", WRK_CNT)
|
||||
worker.start()
|
||||
logger.info("Starting discord bot: Joining threads")
|
||||
WRK_CNT=0
|
||||
WRK_CNT = 0
|
||||
for worker in threads:
|
||||
WRK_CNT+=1
|
||||
WRK_CNT += 1
|
||||
logger.info("Starting discord bot: Joining thread %s", WRK_CNT)
|
||||
worker.join()
|
||||
|
||||
Reference in New Issue
Block a user