(\d-\d{4}/\d{2,3}/)\d{0,2}(\d{2})
. Пример:import re
r = re.compile(r'(\d-\d{4}/\d{2,3}/)\d{0,2}(\d{2})')
m = r.match("1-2345/678/0099")
print(m.groups()) # выведет ('1-2345/678/', '99')
(\d{9})
import re
r = re.compile(r'(\d{9})')
m = r.match("123456789")
print(m.groups()) # выведет ('123456789', )
search_results = googlesearch.search(query, num_results=3)
внутри ask(), и обработать полученные результаты - невелико повторение. Я бы сделал именно так.# Messageable - это что-то, чему можно послать текстовое сообщение. Это может быть канал, пользователь, контекст команды...
async def search_and_reply(query: str, ctx: discord.abc.Messageable) -> None:
try:
search_results = googlesearch.search(query, num_results=3)
if search_results:
await ctx.send("Результаты поиска в Google:")
for result in search_results:
await ctx.send(result)
else:
await ctx.send("Ничего не найдено.")
except Exception as e:
await ctx.send(f"Произошла ошибка при выполнении поиска: {str(e)}")
await search_and_reply(query, ctx)
, но будет брать на себя регистрацию как обработчика команды, проверку ролей и кулдаунов, и прочую мишуру, которой не место внутри search_and_reply(). Тогда ask() может просто сделать аналогичный вызов await search_and_reply(query, channel)
в нужный момент, не беспокоясь о специфике дискорд-обработчика, так как search_and_reply() таковым не является. spisok = "".join(llavw)
url = "https://file.11klasov.net/index.php?do=download&id=16985" # замените на URL файла, который вы хотите скачать
response = requests.get(url)
response.history
, и ты увидишь там два ответа: [<Response [302]>, <Response [301]>]
. Все коды 3XX - это перенаправления, т.е. сайт тебя перенаправляет на другую страницу, вместо того, чтобы отдать контент.response.url
, который будет равен'https://file.11klasov.net/13938-russkij-jazyk-7-klass-razumovskaja-mm-lvova-si-kapinos-vi-i-dr.html'
response.headers['content-type']
. Он будет 'text/html; charset=utf-8'
, т.е. это HTML страница а не PDF файл. Разумеется, если ты HTML страницу запишешь в файл с расширением .pdf, она от этого не станет валидным PDF.response2 = requests.get(url, headers={
'referer': response.url, # ну или 'https://file.11klasov.net/13938-russkij-jazyk-7-klass-razumovskaja-mm-lvova-si-kapinos-vi-i-dr.html'
})
response2.history
будет пустой, а response2.headers['content-type']
будет равен 'application/pdf'
.import signal
import subprocess
import sys
args = [
"ffmpeg",
"-i", f"rtsp://{camera_login}:{camera_pass}@{camera_host}:554/Streaming/channels/1/",
"-err_detect", "ignore_err",
"-reorder_queue_size", "0",
"-map", "0:v", "-c:v", "copy",
"-f", "rtsp",
"-rtsp_transport", "tcp", f"rtsp://{rtsp_server}:8554/live.stream"
]
params = {'cwd': '.'}
if sys.platform == 'win32': # винда у нас особенная...
params['creationflags'] = (
# subprocess.DETACHED_PROCESS | # если хочешь, чтобы ffmpeg запускался тихо и не спамил в твой stdout
# subprocess.CREATE_NEW_CONSOLE | # если хочешь, чтобы открывалась новая консоль для ffmpeg
subprocess.CREATE_NEW_PROCESS_GROUP # по докам, это требуется для нормальной работы ctrl-c
)
my_subprocess = Popen(args, **params)
try:
pass # тут работаешь с процессом
finally:
my_subprocess.signal(signal.CTRL_C_EVENT) # сигналим процессу о завершении
try:
my_subprocess.wait(timeout=5.0) # ждём завершения
except subprocess.TimeoutExpired: # процесс "задумался"
my_subprocess.kill() # тогда прибиваем
model.apply_tts()
, по-хорошему должно выполняться только один раз при запуске программы, а не для каждой генерируемой фразы.model.apply_tts()
. The command prefix is what the message content must contain initially to have a command invoked. This prefix could either be a string to indicate what the prefix should be, or a callable that takes in the bot as its first parameter and nextcord.Message as its second parameter and returns the prefix.
def prefix_func(bot, message) -> str:
, которая будет вызываться для каждого сообщения, и возвращать желаемую строку префикса. Это не только позволяет менять префикс динамически, не трогая бота (бот как дёргал функцию, так и будет дёргать), но и позволяет делать вещи типа "свой префикс у разных серверов".\
) в строковых литералах Питона (как и во многих языках) имеет специальное значение, зависящее от следующего символа. Например, \n
означает символ перевода строки, \t
- символ табуляции, и т.д. Последовательность \u
позволяет задать символ юникода по его коду, например, символ \u00A7
это значок параграфа (§). Но это также разделитель каталогов в пути на платформе Windows. А у тебя в пути есть последовательность "C:\Users\777\Desktop\Новая папка\67.png".\\
- она означает просто символ \
без специального поведения.my_path = r'C:\Users\'
. В таких литералах символ \
не имеет специального поведения, это просто символ./
. Винда это позволяет. p = multiprocessing.Process(target=gen,args=(lst,))
p.start()
p.join()
), когда он завершится. Это мало чем отличается от просто вызова gen() в твоём коде, безо всякого мультипроцессинга.Сам словарь полученный от телеграмм мне нужно его в нужном моменте сохранять в бд, а позже вытаскивать обратно превращая назад в dict, но все идет по наклонной
'entities': [<telebot.types.MessageEntity object at 0x7770137fd0>]
<telebot.types.MessageEntity object at 0x7770137fd0>
явно сериализации не поддаётся, и ни сохранить, ни восстановить его не выйдет. Или убирать ключ entities
, если он тебе не нужен, или разбираться, что это за объект и сериализовывать/восстанавливать его вручную.