znsxwq, во-первых, она пингует эти роли при выводе. Другие носители этих ролей будут вам "благодарны" за бессмысленынй пинг.
Во-вторых, у тебя есть список, нужно вывести первые три(или менее) элемента этого списка. Если ты не знаешь, что такое срезы и как с ними работать, почему ты берёшгься за написание ботов?
ShamiLLL, а. Ну принцип тот же самый, только в роли маркеров - особенности оригинального изображения. Смотри в сторону дескрипторов и матчеров, SIFT и BFMatcher например.
Алгоритм-дескриптор позволит найти узнаваемые особенности, алгоритм-матчер позволит их попарно сопоставить на предмет похожести. А дальше так же, как я описал.
Но успех не гарантирован, если добавка содержит много высокороконтрастных элементов.
nesterso, значит, так спросил. Классы тут ни причем. Если у тебя уровни - это линейная шкала (от 0 до N например), то тупо заведи целочисленное поле в своей БД юзеров. При вызове команды проверь, что это число больше или равно требуемому значению.
nesterso, ну. так приведи код в вопросе в соответствие.
И да, посмотри внимательно на свой код.
if request.startswith("/form"):
if request == "Имя:" \
"\nВозраст:" and id != bot_id:
kick_user(event.user_id
Первое условие отработает, если request начинается со слова "/form". Второе - если тот же request равен строке "Имя:\n Возраст:". Тебе не кажется, что тут противоречие?
Если провайдер банит за ВПН, то решение - сменить используемое VPN решение на что-то более скрытное, или обфусцировать VPN-туннель сторонними средствами.
Михаил Мунтян, ну можно и по-другому - например, явно в начале программы его создать через asyncio.new_event_loop(). Или, если ты уже внутри корутины, то можно вызвать asyncio.get_running_loop().
Так или иначе, тебе нужен экземпляр этого класса, чтобы вызвать create_task(). И в одном потоке может быть только один реактор.
К слову, create_task() вернёт объект Task, с которым тоже много интересного можно сделать. Имеет смысл это возвращаемое значение сохранить.
Михаил Мунтян, нет. Корутина - это всего-навсего async def функция. Вообще, посоветую сначала разобраться с работой асинхронной программы как таковой.
Если очень коротко:
Асинхронная программа состоит из отдельных длительных операций (чаще всего ввода вывода) и реакций на них. Результат операции обычно называется Future.
Цикл-реактор (loop) поочередно, в одном потоке, проверяет текущий список доступных Future. Если какая-то операция закончилась (её Future реализовалось), реактор выполняет код реакции на это Future.
Корутины (async) - это функции, которые умеют приостановить своё выполнение, пока не реализуется указанное Future. Реакция на это заключается в продолжении работы корутины.
Всякая корутина возвращает Future. Если вызвать корутину без await, получишь просто объект Future, который не зарегистрирован в реакторе, и сам код корутины не выполнится.
await - простой способ сказать "запланируй вот это Future к выполнению вместо меня, а я подожду".
Так как реактор работает в одном потоке, в один момент времени работает только одна корутина. Управление между корутинами передаётся строго при вызове await и при выходе из корутины.
При многопоточности другой поток может вклиниться вообще в любой момент, а тут другая корутина может вклиниться только пока ты делаешь await.
Так как реактор работает в одном потоке, длительная синхронная (без await) операция не даст другим корутинам выполняться!
Михаил Мунтян, ну например, так:
"У каждого пользователя есть ассоциированный счёт, раз в N минут этот счёт должен увеличиваться. Насколько - зависит от ряда факторов, т.е. прирост не постоянен. Как реализовать эту цикличность, не нарушая работу остального бота?"
Это если я верно понял.
Взять готовый код можно разве что на фрилансе.
А если хочется всё же разобраться, то придётся привести пример нерабочего кода (отформатируй его </>) и указать полный текст ошибки и другие симптомы проблемы.
DDD, можно. Используй БД (шутка).
А если без шуток, то это твоя забота, где ты будешь сохранять данные программы. Так или иначе, завершение программы значения в оперативной памяти не переживут.
И это верно для любых языков программирования.
nihi1ist, если в args одно значение и оно не является строкой, попробуй обработать его циклом for. Если будет TypeError - значит, это просто args с одним значением, а не переданный список.
Но вообще такие фокусы очень ненадёжны, и я бы не советовал на это полагаться.
А теперь ещё раз и медленно, потому что ничерта не понятно что должно быть, и что происходит.
Что ты делал, чтобы отладить функцию?
Ты уверен, что открывается правильный URL?
Ты уверен, что сайт отдаёт тот контент, который ты ожидаешь?