hey_umbrella, я заметил. Повторю.
> VALUES (photo, 1)
вместо photo тут должно быть конкретное значение id для фотографии.
А у тебя так и осталось. Должно быть
cursor.execute('INSERT INTO stars (photo, star) VALUES (:photo, 1) ON CONFLICT (photo) DO UPDATE SET star = star + 1', {'photo': photo})
И скинь запрос CREATE TABLE, которым таблицу stars создаёшь - я подозреваю, у тебя столбец photo допускает неуникальные значения.
Гуглинг показывает ограничение то ли 200, то ли 1024 символов.
Альтернатива - послать обычное сообщение но с markdown разметкой в самом начале, чтобы встроить в него ссылку на изображение.
Также упоминается приём, где текст этой ссылки - пустой символ юникода. ФЗ работает ли сейчас.
Ну для начала что за подпись? embed? или просто надпись на картинке? Или что?
И если это API телеграма сообщает, что текст слишком длинный, значит, он слишком длинный. Как ни странно.
Оформи код кнопкой </>, а то нечитаемо.
И главное, чудила - чем в exe преобразуешь? Какой инструмент, какая конкретно команда?
Телепаты в отпуске, пиши детали сам.
Что за ошибка? Есть ли такой элемент на странице при ручном просмотре? А если сохранить скачанную скриптом страницу в файл - он есть? Отдел телепатов на карантине, уточняйте вопрос сами.
Вообще я бы посоветовал изменть структуру базы данных.
Таблица предметов - отдельно, таблица учеников - отдельно, а таблица оценок на них ссылается. Это азы проектирования БД.
Потому что сейчас если у вас изменится список предметов, что будете делать? Править все таблицы и запросы?
Даниил Шевкунов, имейте ввиду, что не стоит так сравнивать дробные числа.
Они могут отличаться очень незначительно, скажем,
7.0000000000000000000000001 вместо 7.
Поэтому их лучше сравнивать как
np.isclose(matrix, 7.0, atol=0.0001) где 0.0001 - желаемая точность сравнения
ut1ka, я уже написал выше. Ваши собственные слова (выделение моё):
def izmproc(call, user_type, user_id)
она возвращает
return user_id
Т.е. чтобы izmproc() могла вернуть user_id, ей нужно при вызове передать это значение как третий параметр. Т.е. вызывающая функция (в вашем случае proc_cas(), если я верно понял) УЖЕ должна знать user_id, чтобы отдать его izmproc().
Поэтому сам вопрос "как передать переменную user_id из izmproc" просто не имеет смысла. Вы не можете получить ничего от izmproc() если вы её не вызовите, и вы не можете её вызвать, если у вас нет значения user_id. Вам нужно получить user_id каким-то другим путём.
Каким? Без понятия, для этого нужно знать, что за задачу вы пытаетесь решить, и как именно. У меня просто нет времени в этом вникать.
Марк Ешкилев, потому что "родительский" (внешний) фрейм может отслеживать происходящее во внутреннем, в т.ч. нажатия клавиш (ввод пароля). Так что с "сайт в сайте" многие ресурсы активно борются.
Функции izmproc нужен определённый набор данных для работы: call, user_type, user_id
> таких данных в функции proc_cas нет
Значит вызвать функцию izmproc вы оттуда не можете. Точка.
Либо сделайте так, чтобы эти данные в proc_cas были (передайте их как параметры, или получите откуда-то ещё), либо найдите способ обойтись без izmproc. Третьего не дано.
Samad_Samadovic, стооооп, ну кто ж так делает! Избегайте втыкать строки прямо в тело запроса, это прямой путь к поломанным запросам и SQL-инъекциям.
cur.execute(f'UPDATE Home_work SET {For_lesons[lug]} = ? WHERE id = ?', (CVB, 1))
Вместо каждого ? sqlite поставит очередной элемент из кортежа. Но это работает только для значений, а не для имён столбцов. Вот почему я оставил For_lesons[lug] на месте, а не вынес его в кортеж.
Samad_Samadovic, будет в разы более читаемо.
Далее, вам нужно просто передать одну строку как параметр запроса? Или у вас в строке несколько параметров, и вы хотите их разделить? Это совершенно разные вопросы, и вам ответили на второй.
На первый ответ проще: ('Hello world!', ) Запятая значима!
Самый простой способ - используй модуль time.
Функция time.time() возвращает число секунд с начала эпохи (полночь 1 января 1970). Т.е. вычтя два значения, возвращённых этой функцией в разное время, можно узнать, сколько секунд (и долей секунды) прошло между ними.
В базе данных создаёшь таблицу со столбцами ID пользователя (INT) и метка времени (REAL). В неё и сохраняешь время последнего выполнения команды.
При проверке - делаешь SELECT для данного ID пользователя и извлекаешь значение метки времени. Если оно нашлось - вычитаешь его из текущего значения time.time(). Если разность более 24 часов (выраженных в секундах) - можно выполнять команду снова.
Не придирайтесь к словам.