mynickandmyname, Нельзя использовать одну базу sqlite в нескольких потоках.
Нужно задуматься, а так ли нужны потоки. Если без них ну вообще никак, использовать другую СУБД, которая работает в отдельном процессе, и в каждом потоке использовать отделньое подключение.
Zaphkiel02, в питоне функции и классы являются "объектами первого класса" - т.е. такими же как простые объекты и значения. С ними можно делать всё то же, что и с обычными объектами: помещать в переменные, передавать как параметры функций, возвращать из функций и т.д.
На этом основывается механизм "функций обратного вызова", они же callback-функции.
Когда ты вызываешь метод protocol(), ты говоришь ему "возьми вот эту функцию block_mouse, и вызови её, когда наступит событие WM_DELETE_WINDOW". Tkinter принимает это к сведению, и сохраняет ссылку на функцию у себя. А когда событие наступит, проверит соответствующий список функций, которые надо вызвать, и вызовет их.
В твоём первоначальном коде, с ошибкой, ты говорил следующее: "возьми результат вызова функции block_mouse(), и вызови этот результат, когда наступит событие WM_DELETE_WINDOW". В результате block_mouse() уходила в бесконечную рекурсию.
gramawolf, приложить усилия и подумать. Я тебе прямо сказал что не так: ты настраиваешь один экземпляр бота (который лежит в переменной client), а запускаешь и вообще работаешь с другим (который лежит в переменной бот). Два экземпляра тебе не нужны, делай всё с одним и тем же, например с bot. А если тебе нужно, чтобы за тебя писали готовый код, так это на соседний ресурс.
Gagak, так в чём вопрос-то?
Неясно, как реагировать на начало работы (/start)?
Неясно, как удалить сообщение?
Неясно, как отследить, какому пользователю уже показывали сообщение?
Если только начинаешь работать с aiogram, освой сначала базовые инструменты, а потом уже принимайся за многошаговые сценарии.
1. А бот точно видит подключившихся? Интент на получение событий от мемберов не забыл настроить? on_member_join() вызывается?
2. Почитай доки по sqlite, там есть конструкции INSERT ... ON CONFLICT ... IGNORE и INSERT ... ON CONFLICT ... UPDATE..., что позволит свести два запроса (SELECT+INSERT) в один.
Richard Kamsky, тогда приводи свой нерабочий код, желательно минимальную версию, которая демонстрирует косяк. На примере будет проще разобраться, может, дело-то не в BS4.
Дмитрий, так я про то и српашиваю: почему у тебя в коде в начале цикла n //= 10? =)
Но вообще да, проще было бы собрать все цифры в множество (set), а потом посмотреть, сколько их там.
Ну начать с того, что в первом коде ты первым делом делаешь n //= 10, т.е. отбрасываешь последнюю цифру числа (единицы). Дальнейшие операции будут производиться уже с десятками.
Во втором коде, не прерываешь цикл при несовпадении цифр. Как только нашли несовпадение - уже знаем, что цифры разные.
Ну и наконец, в обоих кодах косяк: условие n != 0 заставит программу обрабатывать однозначное число (0 < n < 10), а алгоритм на однозначное число не рассчитан.
Zuio4ok, тебе дело говорят. Если я тебе напишу готовый код, ты споткнёшься на следующем шаге (а возможно, даже на таком же затруднении) и снова прибежишь сюда.
Знать основные конструкции и структуры данных языка необходимо, просто чтобы понимать, что тебе говорят, и понимать документацию.
Боты - это НЕ простая тема. Не надо с них начинать.
Нужно задуматься, а так ли нужны потоки. Если без них ну вообще никак, использовать другую СУБД, которая работает в отдельном процессе, и в каждом потоке использовать отделньое подключение.