Ответы пользователя по тегу Python
  • Как сделать из int str?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ну вот у тебя в row набор значений из базы по uid=..., тебе нужно взять то что тебе нужно и отобразить в названия ролей. Например, с помощью словаря, в котором каждому числовому значению присвоено своё строковое:

    my_awesome_dict = {
        1: "Первый",
        2: "Второй",
        10: "Десятый".
    }
    
    print (my_awesome_dict[admin])


    Зачем там дальше делается неправильный insert? Он же просто вернёт ошибку, так как в запросе нет никакого admin, чтобы вставить в таблицу.
    Ответ написан
  • Как спарсить это значение через python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И не будет. Таблица

    <tbody class="table table-hover usdtrub_ask asks">

    пустая и заполняется js после загрузки страницы. Надо или использовать Selenium, или разобраться, откуда скрипт подгружает эти данные, и воспроизвести (подсказка: wss://ws.garantex.io).
    Ответ написан
    Комментировать
  • Discord.py Хочу сделать команду autoclear и присвоить ее каналу, но не пойму как это реализовать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    только начал изучать питон


    В этом-то и заключена проблема. Разумеется, если не понимать, что делаешь, то будет получаться непонятно что.

    В данном случае что происходит?

    1. Мы ловим любое сообщение на любом сервере, где есть бот, в любом из каналов, которые боту видны.

    2. Затем мы зачем-то получаем канал с фиксированным id.

    3. Затем мы обращаемся в этом канале к свойству message (а оно там есть? и что это будет, сообщение? какое?) и от него вызываем метод delete, причём с параметром message.

    В результате даже если этот, с позволения сказать, код удастся запустить, он работать всё равно не будет, зато будет кидать ошибки.

    Не нужно пытаться наугад писать бота. Это как пытаться залить бензин в автомобиль куда получается: в бачок для масла, в выхлопную трубу, в нипель на колесе... - в надежде, что она всё-таки поедет.

    Увы, но нет. Сначала надо освоить язык, начиная с элементарных основ, описываемых в учебнике. А уж потом переходить к более сложным темам.
    Ответ написан
  • Как выдать роль пользователю?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    user = await self.bot.get_user(ctx.from_id)

    Тут получаем пользователя, который отправил это сообщение.

    await basa.register.main.adm(user)

    Тут мы этого пользователя передаём в функцию adm.

    await cur.execute("UPDATE profile SET admin='Хелпер' WHERE uid=%s", user.id)


    Тут мы в этой функции меняем значение поля admin у этого пользователя.

    Странно спрашивать, почему код работает так, как он был написан. Явно же имелось в виду, что в функцию adm надо передавать не отправителя команды, а то, что передано параметром команды.
    Ответ написан
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала надо изучить язык программирования, потом освоить нужную библиотеку и уже тогда писать бота. А то это как выехать на трассу, купив водительсике права, но не изучив азы вождения.
    Ответ написан
    Комментировать
  • Как получить id всех участников группы в тг?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В Telegram Bot API нельзя получить список участников группы, только общее количество getChatMemberCount, список администраторов getChatAdministrators и информацию о конкретном участнике чата по заранее известному id пользователя getChatMember. Именно поэтому вагоны примеров в поисковиках в основном используют библиотеку telethon.
    Ответ написан
    Комментировать
  • Sql запрос UPDATE, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    SET admin=Хелпер означает, что полю admin надо присвоить то же значение, что и у поля Хелпер. Но у нас нет в таблице никакого Хелпер.

    Чтобы присвоить значение не по имени столбца, а конкретное значение, его надо обернуть в одинарные кавычки:

    UPDATE profile SET admin='Хелпер' WHERE ...

    Вообще, советую почитать элементарные основы SQL, тогда таких вопросов возникать не будет.
    Ответ написан
  • Как в telebot отправить сообщение в виде таблицы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Очевидно, что если в цикле вызывать send_message, то будет отправлено столько сообщений, сколько итераций цикла. Надо собрать сообщение в одну переменную и затем одной операцией send_message его отправить. Примерно так:

    message_text = ""
    for res in cursor.fetchall():
        message_text += "{0} {1}".format(res[0], res[1]))
    bot.send_message(..., message_text)
    Ответ написан
  • Как узнать апи пользователя который отправил сообщение телеграмм боту?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, бот не может узнать IP пользователя.
    Ответ написан
  • Изза чего Ошибка time, aiogram, Python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    import time в начале скрипта сделан? Откуда он узнает, что такое time?
    Ответ написан
    2 комментария
  • Как отправить сообщение от телеграм-бота на python определенным пользователям, при запросе от создателя?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для начала, id - это число. Зачем хранить их в виде строк?

    Далее, при отправке from_user.id сравнивается также со строкой. Конечно же, равенство строки и числа невозможно.

    И, наконец, отправка должна идти по числовому id.

    Надеюсь, все адмиины из массива нажали /start у бота? Без этого им сообщения отправлять будет нельзя.
    Ответ написан
    7 комментариев
  • Как запретить пользователю отвечать на свои сообщения | Aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Проверять id отправителя того сообщения и сравнивать с id текущего пользователя.

    message.reply_to_message.from_user.id == message.from_user.id


    Если совпадают то не повышать репутацию.
    Ответ написан
    Комментировать
  • Как удалить кнопку из клавиатуры telebot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Нельзя удалить одну кнопку. Можно либо удалить всю клавиатуру целиком, либо отправить другую клавиатуру на замену. Соответственно, для удаления всего одной кнопки нужно помнить, какую клавиатуру отправлял в прошлый раз (хранить это явным образом или определять из контекста), чтобы отправить новую клавиатуру без этой кнопки.
    Ответ написан
    Комментировать
  • Как использовать слэш команды в дискорде с помощью бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Во-первых, слеш-команды - это НЕ сообщения, начинающиеся на /, а отдельные сущности со своей инфраструктурой и своим способом взаимодействия. На это вполне намекает, что у разных ботов могут быть команды с одинаковыми именами, а ответ бота может быть виден только отправившему команду пользователю. Отправка ботами команд для других ботов не предусмотрена вообще.

    Во-вторых, даже с классическими командами, которые были текстовыми с префиксом, в большинстве правильно написанных ботов на них делали проверку, что отправлял команду не бот. Это связано с тем, что при любых ошибках легко начинался ботофлуд, при котором боты очень быстро и активно начинали общаться друг с другом. Поэтому с ними подобный фокус тоже часто не прокатывал.

    Посылать команды может разве что юзербот, но их использование запрещено правилами Discord.
    Ответ написан
  • Как вызывать команды внутри машины состояний aiogram?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Лучше всего, конечно, выносить общую часть функционала в отдельную функцию. Например, пусть в обработчике /start информация о пользователе добавляется в базу и отправляется приветственное сообщение с какой-нибудь справкой по использованию. Скорее всего, повторно добавлять в базу не надо, а вот приветственное сообщение можно и выделить в какую-нибудь send_welcome_message (естественно, с параметром chat_id и при необходимости другими параметрами, нужными для её работы). Типа, пользователь запустил бота, поотвечал на вопросы, потом получил опять приветственное сообщение с информацией о своей работе, которую пользователь уже успел забыть, пока заполнял анкету.

    Но если прям очень хочется, то можно вызвать функцию напрямую. Но если она обёрнута декоратором, то её вызвать напрямую может быть опасно, так как после применения декоратора это будет уже другая функция, которая имеет право создавать какие-нибудь спецэффекты при своём запуске. Если регистрировать без декораторов, вызовами register_message_handler, то исходная функция изменяться не будет, но с декораторами можно писать более красиво.
    Ответ написан
    Комментировать
  • Какие библиотеки позволяют писать и юзерботов и ботов телеграмм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Такая библиотека только одна - pyrogram. Её авторы пытаются реализовать одинаковый интерфейс для двух разных видов API Телеграма. Если при инициализации бота передать токен - будет использоваться Bot API, если имя сессии - будет при первом запуске проведена авторизация в Телеграме, а потом будет всегда работать из-под пользователя при каждом запуске. Конечно, совсем без нюансов и различий нельзя, но в целом это работает.

    Но даже с этой библиотекой придётся инициализировать двух разных ботов и организовывать между ними какое-то взаимодействие (что может вылиться в дополнительную не самую простую задачу). Например, боту требуется по запросу отправить большой файл, он из API userbot'а отправляет самому себе (обычному боту) файл, тот получает file_id и пересылает его конечному пользователю.

    Поскольку ботов фактически будет всё равно два, то они могут использовать и разные библиотеки. Например, aiogram и telethon или telebot (AsyncTeleBot?) и pyrogram.
    Ответ написан
    Комментировать
  • Неправильно работает анти-флуд в боте телеграм, что делать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Пока бот выполняет time.sleep, он ниего не делает. Нужно использовать либо треды, либо asyncio (с асинхронным же asyncio.sleep).
    Ответ написан
    5 комментариев
  • Почему значение len(списка) не меняется в range?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Потому что len(a) ситается в начале цикле и передаётся в range, который вызывается один раз и больше не вызывается повторно. Чтобы вызывался, надо вместо for использовать while с условием, а итерируемое значение явно увеличивать в каждой итерации цикла.
    Ответ написан
    1 комментарий
  • Requirement already satisfied?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Это означает, что данная зависимость уже установлена, и даже написано что именно и какой версии. Очевидно, новой версии pip и pyinstaller нет, установлены самые последние. Никак реагировать не нужно, если всё и так работает.

    Что pyinstaller не работает... Ну, читать доку по нему. Скорее всего, где-то он не в %path% или его надо как-то иначе запускать.
    Ответ написан
    Комментировать
  • Как добавить двумерный массив в python заранее неизвестным количеством значении?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не массив, а list (список). Или даже dict (словарь), если хочется произвольные ключи.

    Можно в качестве элементов списка делать другие списки, создавая не то что многомерные массивы, а вообще развесистые деревья разнообразной глубины.
    Ответ написан
    Комментировать