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