member_full = bot.get_user(id=id)
banned_users = await ctx.guild.bans()
for ban in banned_users: ...
member_full = bot.get_user(id=id)
async for ban in ctx.guild.bans(): ...
async for x in y
- это не то же самое, что и for x in await y
. Асинхронный генератор (первый случай) каждый элемент запрашивает асинхронно, а во втором случае - асинхронно запрашивается вся коллекция, которая потом синхронно итерируется. Разные подходы, разные методы, так что объект вполне может поддерживать только один из них. def sum_split(summa: int, candidates: list[int]) -> list[int]:
answer = sum_split(summa - candidates[i], candidates[i+1:])
.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
, если он тебе не нужен, или разбираться, что это за объект и сериализовывать/восстанавливать его вручную.