Ответы пользователя по тегу AIOgram
  • Как создать Токен для Tinkoff?

    vabka
    @vabka
    Токсичный шарпист
    https://www.tinkoff.ru/kassa/dev/payments/#tag/Sta...
    Видимо таки какие-то параметры не те указываешь.

    Вот, как на самом деле формируется токен:
    https://www.tinkoff.ru/kassa/dev/payments/#section...
    Перед выполнением запроса MAPI проверяет, можно ли доверять его инициатору. Для этого сервер проверяет подпись запроса. В MAPI используется механизм подписи с помощью токена. Мерчант должен добавлять токен с каждому запросу, где это требуется.

    Токен - это не просто конкатенация. Это конкатенация + хэширование


    Она направила на документацию и на этот сайт https://tokentcs.web.app/

    Этот сайт как раз демонстрирует, как происходит генерация токена исходя из пароля и параметров запроса

    Вот прям пошаговый алгоритм:
    1. Собрать массив передаваемых данных в виде пар Ключ-Значения. В массив нужно добавить только параметры корневого объекта. Вложенные объекты и массивы не участвуют в расчете токена.

    В нашем случае это TerminalKey и PaymentId

    2. Добавить в массив пару {Password, Значение пароля}. Пароль можно найти в личном кабинете Мерчанта
    3. Отсортировать массив по алфавиту по ключу
    У нас получается Password, PaymentId, TerminalKey
    4. Конкатенировать только значения пар в одну строку
    У нас получается Password + PaymentID + TerminalKey
    ВАЖНО! payment_id нужно брать именно такой, какой тебе пришёл из API. Лишние или недостающие нули - всё сразу пойдёт по сам-знаешь-какому месту.

    5. Применить к строке хеш-функцию SHA-256
    В питоне для этого можно использовать hashlib
    Я хз каким образом без этого у belkinark заработало. Мб он что-то напутал.
    6. Добавить получившийся результат в значение параметра Token в тело запроса и отправить запрос
    Ответ написан
    8 комментариев
  • Могу ли я отправлять сообщения от чужого имени с помощью telegram бота?

    vabka
    @vabka
    Токсичный шарпист

    API телеграмма

    Только тот API, который используется клиентами, а не ботами: mtproto.


    Можно ли использовать для этого AIOgram

    Нет, нельзя.


    Например мне нужно написать сообщение другому боту через бота

    Это звучит как что-то катастрофически неправильное. Скорее всего вашу задачу можно решить иначе.
    Ответ написан
  • Как фильтровать нецензурную лексику в telegram боте?

    vabka
    @vabka
    Токсичный шарпист
    Никак. Самый надёжный способ - постмодерация.
    Если кому-то из получателей не понравилось манера общения - блокировать отправку конкретному получателю.

    Если систематически жалуются разные получатели - вводить бан насовсем.

    Даже если ты сможешь сделать идеальный фильтр для пяти слов, который не будет давать ложных срабатываний - всё равно есть целая куча не менее грубых слов и выражений, которые матом не считаются
    Ответ написан
    Комментировать
  • Можно ли написать пользователю через бота если раньше не было взаимодействия?

    vabka
    @vabka
    Токсичный шарпист
    Нельзя.
    Но ты можешь сделать так, чтобы перед входом в группу нужно было повзаимодействовать с ботом.
    Например через капчу или через "запросить у администратора доступ в группу"
    Ответ написан
    Комментировать
  • Как реализовать перенос строки MarkdownV2?

    vabka
    @vabka
    Токсичный шарпист
    В базе данных перенос должен быть в сыром виде. Если вставляешь запись руками, то попробуй shift+enter нажать.

    Если вставляешь через код, то тогда \n без экранирования.

    Если хочешь, чтобы перенос сохранился после рендера md, то Vindicar дал ответ.
    Одинарный перенос в md игнорируется
    Ответ написан
    1 комментарий
  • Как использовать on_startup в боте телеграмм?

    vabka
    @vabka
    Токсичный шарпист
    1. У тебя ошибка в SQL-синтаксисе: CREATE TABLE IF NOTE EXISTS
    2. Что мешает тебе вызывать bd_start непосредственно перед запуском бота? Что-то типа:
    async def main():
        await bd_start() # так
        bot = Bot(token=config.BOT_TOKEN, parse_mode=ParseMode.HTML)
        dp = Dispatcher(storage=MemoryStorage())
        dp.include_router(router)
        await bot.delete_webhook(drop_pending_updates=True)
        await dp.start_polling(bot, allowed_updates=dp.resolve_used_update_types(), on_startup=on_startup)
    Ответ написан
    1 комментарий
  • Что такое пулинг стейт?

    vabka
    @vabka
    Токсичный шарпист
    Никакого "пулинг Стейт" в aiogram нет.
    Вероятно, вам сказали что-то другое.

    Чтобы бот автоматически поднимался при сбое - это совершенно независимая от aiogram вещь, которую можно настроить, например, через systemd.

    Чтобы при этом бот "помнил" в каком состоянии он находился перед сбоем - нужно сохранять состояние в какую-нибудь базу данных.

    Для сохранения состояния в aiogram есть FSM, но это не значит, что тебе нельзя ещё и самостоятельно что-то реализовать.
    Ответ написан
    Комментировать
  • Как реализовать добавление даты и времени в SQLite3 через бота на aiogram?

    vabka
    @vabka
    Токсичный шарпист
    Дату и время в sqlite можно сохранить двумя вариантами:
    Как строку - удобно и ничего не нужно будет выдумывать.
    Как число (Unix time) - компактно и можно будет нормально фильтроваться, но нужно будет конвертировать.


    И чтобы дата и время не повторялись в бд

    Уникальный индекс.

    Телеграм и python к вопросу отношения не имеют.
    Ответ написан