Ответы пользователя по тегу Боты
  • Почему команды бота(discord.py) не обновляются?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если это именно бот, а не пользователь, то никак. В Bot API нет такой функциональности. Можно только самому отслеживать добавления/удаления бота с самого начала его существования.

    Для юзербота пример есть прямо в документации: https://docs.pyrogram.org/start/examples/get_dialogs
    Ответ написан
  • Активная ссылка на viber бота?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Ответ написан
    Комментировать
  • Можно ли telegram бота подключить сразу к двум сервисам через один токен?

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

    Но потенциально можно отправлять пользователям сообщения из разных источников. Правда, придётся наладить обмен информации по пользователям между этими двумя источниками. Что само по себе немного странная задача.
    Ответ написан
    1 комментарий
  • Как избежать ошибки?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вплоть до версии 3.35 в sqlite нельзя было удалять колонки вообще https://sqlite.org/changes.html#version_3_35_0
    Ответ написан
    Комментировать
  • Как исправить ошибку при работе с inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А что делает message_text у InlineQueryResultArticle? Это параметр конструктора InputTextMessageContent. Неудивительно, что ругается.
    Ответ написан
    Комментировать
  • Как заставить бота работать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    А как он должен работать, если ты в обработчике zodiac создаёшь переменную msg, но никаких сообщений не отправляешь? До кучи, как по-твоему это будет работать, если call.data на всех кнопках одинаковый, как бот их будет различать?
    Ответ написан
  • Aogram Почему бот не отвечает на сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это потому что "в конце". Обработчики перебираются последовательно, и как находится подходящий, остальные не используются. А тут два обработчика с одинаковым декоратором, естественно, что первый будет применяться, а второй уже нет.

    Надо или обрабатывать обе команды в одной функции, или отфильтровать в декораторе так, чтобы он применялся только к конкретным сообщениям

    Условие commands=["баланс"] в декораторе позволит использовать команду как /баланс

    А вот такой вариант:

    @dp.message_handler(lambda message: message.text and (message.text.lower() == "баланс"))
    позволит сделать то же самое без / перед словом "баланс". И вообще, так можно делать более сложные проверки.
    Ответ написан
  • Как вывести сообщения по очереди?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Любой учебник по python, искать раздел про цикл for.
    Ответ написан
    Комментировать
  • Как исправить ошибку SQLite3, Discord Bot?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Смотри, допустим, emoji у тебя равно :duck:, тогда будет выполнен следующий запрос:

    INSERT INTO emo VALUES (:duck:)

    А надо было:

    INSERT INTO emo VALUES (':duck:')

    Теперь понятно?

    Ладно, допусим, ты вставишь в запрос кавычки, дальше кто-нибудь добавит в код эмодзи кавычки и сможет заставить скрипт выполнить такой запрос:

    INSERT INTO emo VALUES ('');DROP TABLE emo;--')

    После чего таблица emo будет удалена. Нельзя просто так вставлять в запрос то, что передаёт пользователь. Надо использовать плейсхолдеры:

    cursor.execute("INSERT INTO emo VALUES (?)", (emoji,))


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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если по ссылке, то надо передать ссылку в URL: ...&document=ссылка

    Если файл лежит локально, то передать файл в multipart/form-data, как-то примерно так: https://curl.se/libcurl/c/postit2.html
    Ответ написан
    Комментировать
  • Как установить аватар?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Там же есть документация и даже с примером. Он, конечно, на js, но из него и так всё ясно: надо передать параметр avatar со ссылкой на аватарку,

    Установить никак. Боты не могут менять аватарки пользователей.
    Ответ написан
    Комментировать
  • Discord Бот выдающий роль по необходимому сообщению?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    add_roles - метод класса discord.Member, а не discord.Client. Соответственно, его надо вызывать от правильного объекта. В данном случае самый простой способ получить инстанс Member отправителя данного сообщения - это обратиться к message.author:

    await message.author.add_roles(role)

    При этом role тут должно быть не id роли, а объект discord.Role. Который можно получить методом get_role класса discord.Guild. А его для Member можно получить из поля guild.

    Итого получается, что нам надо:

    author = message.author
    guild = author.guild
    role = guild.get_role(898612321755230260)
    await author.add_roles(role)


    Или если собрать в одну строчку:

    await message.author.add_roles(message.author.guild.get_role(898612321755230260))
    Ответ написан
    Комментировать
  • Как вызвать функцию через inline mode?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Никак, inline mode для этого не предназначен.

    Inline mode - это средство помощи пользователю в наборе сообщения. В бота прилетает запрос, который он анализирует и выдаёт список вариантов. Этот список потом кэшируетя и может какое-то время не вызывать при таких же параметрах со стороны пользователя реального запроса к боту. Изменять уже отправленные ответы для inline mode бот не может. Узнать, отправил ли пользователь в итоге сообщения и в какой чат он тоже не имеет возможности.
    Ответ написан
    Комментировать
  • Как боту изменить сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    message в этой функции - это сообщение пользователя, который написал /start. Дальше бот пытается редактировать это сообщение... и не получается! Конечно, ведь он может редактировать только свои сообщения, а чужие не может.

    Он должен просто редактировать своё сообщение, а не сообщение пользователя:

    my_new_message = await bot.send_message(message.chat.id, 'Ждем: 2сек')
    await sleep(1)
    await bot.edit_message_text(chat_id=message.chat.id, message_id=my_new_message.message_id, text='Ждем: 1сек')
    ...
    Ответ написан
    Комментировать
  • Как определить язык написанного сообщения на discord.js?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если надо определять язык текста, то смотреть в сторону language identification, например, есть библиотека fasttext, и вот есть первый попавшийся пример реализации на js https://github.com/rse/fasttext-lid (но в гугле я видел и другие, не знаю, какая будет лучше).

    Если надо определять язык конкретных слов, то может быть интересно использовать стеммеры под нужные языки и затем проверять наличие слова в словаре для этого языка. Либо перебирать весь словарь с учётом расстояния Левенштейна либо другой текстовой метрики.

    В общем, это не самая тривиальная задача.
    Ответ написан
    3 комментария
  • Как научить чат-бота в телеграм воспринимать буквы?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я пришлю тебе

    '';drop table config;select bitcoin from config

    И таблица config будет удалена. Это называется SQL-инъекцией.

    Ты не оборачиваешь строку в кавычки, разумеется, ничего хорошего не получится. В случае цифр, конечно, запрос без кавычек выполняется успешно. Но вообще это неправильный способ использования SQL, так как любая кавычка его сломает, а тщательно подготовленный текст (пример я привёл) вообще вызовет не тот запрос, который планировался.

    Правильно использовать плейсхолдеры:

    q.execute("UPDATE config SET bitcoin=? WHERE id=?", (new_bitcoin, user_id))


    В этом случае база данных сама правильно всё подставит и выполнит.
    Ответ написан
    Комментировать
  • Почему при добавлении бота в канал (Telegram) - он не работает?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если у бота включена опция Group Privacy, то он не видит сообщений в ней. Её надо выключить.

    BotFather - Bot Settings - Group Privacy.

    upd: Хотя, конечно, дело в другом, речь идёт о каналах, каналы - это не группы, там другой метод обработки сообщений.
    Ответ написан
    3 комментария
  • Как сделать рассылку юзерам телеграм-бота на python?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно просто запустить другой скрипт, который создаст объект телебота с тем же токеном, но не будет использовать polling, а сразу вызовет send_message сколько нужно раз. Но надо не забывать про rate limit.

    PS: Почему тут каждую неделю спрашивают про рассылку ботом по списку? Неужели нет более интересных учебных задач?
    Ответ написан
    3 комментария
  • Как создать канал которому можно отправлять анонимные истории?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Технически гарантировать анонимность нельзя. Бот всегда видит имя и id пользователя, который ему пишет.

    Но можно написать бота так, чтобы пользователя, отправившего сообщение, он никуда не сохранял, своему администратору не показывал и даже в логах не палил. Пользователи всё равно не смогут это проверить. Обычно любители подобного жанра не настолько продвинуты, чтобы о таком задумываться, поэтому многие даже не сомневаются, когда пишут "боту для анонимок", который есть у различных каналов, в том числе оппозиционных.

    Как вариант, можно предложить пользователям оставлять истории в стороннем источнике, а в бота присылать ссылку. Например, пусть постят на pastebin.com и присылают ссылку на него. Правда, это довольно замороченно и неудобно, люди будут путаться или даже вообще решат не связываться.
    Ответ написан
    3 комментария