Ты сначала присваиваешь ссылку на объект InlineKeyboardButton, потом оборачиваешь это в InlineKeyboardMarkup.
Вообще-то уже тут надо остановиться и подумать - не стоит изменять тип данных в переменной, это сбивает с толку.
Далее, ты пытаешься уже обёрнутый InlineKeyboardMarkup обернуть в ещё один InlineKeyboardMarkup. Я не уверен что это действие вообще имеет смысл, и не удивлюсь, если в нём и проблема.
И вообще, тебе что, отрезают по пальцу за каждое использованное имя переменной? Что за дурацкая экономия? Зачем десять раз переприсваивать kb_client, ну назови это как-то по-другому.
poproboval, тебе нужно решить - или ты работаешь в браузере, или вне браузера. Разница принципиальная, так как код в браузере по определению выполняется в песочнице, внутри которой многие вещи недоступны (и слава богу что так).
Так что для начала стоит уточнить, где должен выполняться Питон-код? У клиента - не вариант. На сервере... возможно, но муторно и нагрузка будет.
А вообще да, без необходимости затаскивать в проект ещё один язык не стоит.
Zore_pinge, неудивительно. Просто прочитай свою программу внимательно.
Ты строишь список файлов.
Выбираешь случайный файл.
Затем описываешь обработчик, который будет кидать ранее выбранный файл.
Обрати внимание, что выбор файла производится один раз! Вот потому этот один выбранный файл и кидает.
Простая логика.
Хочешь, чтобы каждый вызов обработчика кидал другой файл - выбирай файл внутри обработчика.
budilovd, функция input() предназначена для ввода из окна терминала, и больше ниоткуда. Про дискорд она ничего не знает.
Так что действительно, поучи основы языка сначала. Боты - это НЕ просто, чтобы бы не говорили ютуб-клоуны. Всё равно что учиться водить автомобиль, сев в болид формулы 1.
Linba, а вот про СМС стоило блин упомянуть в вопросе! Потому что это совсем не просто с точки зрения реализации... может и можно что-то изобрести, подключив подходящий USB-GSM модем, но я фз как.
1. Оформи код как положено, кнопкой </>. Нечитаемо же.
2. В чём конкретно выражается ошибка? "Я делаю то-то, программа должна делать А, а делает Б".
3. Если программа выводит сообщение об ошибке, приведи его полностью.
FlashDok, просто используйте отдельный курсор. У вас может быть несколько активных курсоров. Ну или освойте запросы с JOIN, если объём данных позволяет.
B0w1, ну для начала.
message.chat.id == CHANNEL_ID
Это выражение не имеет смысла по двум причинам. У тебя в функции нет ни параметра message, ни константы CHANNEL_ID, да и сравнение даст логическую истину или ложь, а send_message() нужен ID чата, куда отправить сообщение.
Так что тот факт, что ты оставил это выражение как есть и не заменил его на нужный тебе ID намекает, что ты не очень понимаешь, что делает код, который ты пишешь/копипастишь.
Так что повторю совет выше - поучи основы питона для начала. Потом сэкономишь много времени, не спотыкаясь о такие вопросы. Боты - это НЕ простая в освоении штука.
Вот это выражение заменяет значение kb_client, так что код выше уже не имеет эффекта.
Далее, что это за муть?
Ты сначала присваиваешь ссылку на объект InlineKeyboardButton, потом оборачиваешь это в InlineKeyboardMarkup.
Вообще-то уже тут надо остановиться и подумать - не стоит изменять тип данных в переменной, это сбивает с толку.
Далее, ты пытаешься уже обёрнутый InlineKeyboardMarkup обернуть в ещё один InlineKeyboardMarkup. Я не уверен что это действие вообще имеет смысл, и не удивлюсь, если в нём и проблема.
И вообще, тебе что, отрезают по пальцу за каждое использованное имя переменной? Что за дурацкая экономия? Зачем десять раз переприсваивать kb_client, ну назови это как-то по-другому.