• Как сделать стабильный загрузчик видео?

    @rPman
    yt-dlp

    И бодаться с гугловскими системами противодействия автоматизаций.

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

    p.s. почти наверняка есть официально платные услуги по доступу к данным, но наверное задорого и не доступно публично. Компания не зря тратила годами сотни миллионов баксов убытков чтобы стать монополистом по хранению и доступу к видеоконтенту, а на фоне последних веяний 'данные - новое золото' с целью обучения ИИ, отдавать данные просто так гугл точно не будет.
    Ответ написан
    4 комментария
  • Как вызвать Callback без inline клавиатуры?

    @codingoleg
    Если вопрос только в поп-ап уведомлении, то в апи телеграма написано, что метод только для Inline клавиатур. Поэтому aiogram вам ничем не поможет. Если нужна проверка входящих данных, то можно использовать один из или все три варианта: 1. Машина состояний. 2. Функция проверки в аргументах декоратора. 3. Middleware для более сложных случаев. Вот вам 1 и 2 вариант:
    from aiogram import Bot, Dispatcher, executor, types
    from aiogram.types import ReplyKeyboardMarkup
    from aiogram.contrib.fsm_storage.memory import MemoryStorage
    
    bot = Bot('')
    storage = MemoryStorage()
    dp = Dispatcher(bot, storage=MemoryStorage())
    
    state_time = 'setTime'
    kb = ReplyKeyboardMarkup(row_width=10, one_time_keyboard=True)
    btns = (types.KeyboardButton(str(btn)) for btn in range(1, 31))
    kb.add(*btns)
    
    @dp.message_handler(commands=['start'])
    async def dp_choose_user(message: types.Message):
        await message.answer('Введите день:', reply_markup=kb)
        await dp.current_state().set_state(state_time)  # Вход в состояние ввода даты
    
    @dp.message_handler(lambda message: message.text.isdigit() and 1 <= int(message.text) <= 30, state=state_time)
    async def dp_choose_action(message: types.Message):
        await message.answer(text=f'Вы выбрали {message.text}')
        await dp.current_state().reset_state()  # Выход из состояния ввода даты
    
    @dp.message_handler(state=state_time)
    async def dp_choose_action(message: types.Message):
        await message.answer(text='Ошибка ввода даты. Введите еще раз.', reply_markup=kb)
    
    executor.start_polling(dp)
    Ответ написан
    Комментировать
  • Как сделать нормальные глобальные переменные?

    @codingoleg
    Если вас не пугает потеря этих данных, например, из-за перезагрузки бота и прочего, то можно сделать глобальную переменную - словарь. Ключом будет id пользователя или чата, а значением - то, что вы хотите сохранить для него.
    users = {
        12398767: {'name': 'Vasya'},
        98765467: {'name': 'Lena'}
    }
    
    def edit(user_id: int):
        global users
        users[user_id]['name'] = 'Petya'
    
    def read(user_id: int):
        print(users[user_id]['name'])
    
    edit(12398767)
    read(12398767)  # Petya
    print(users)  # {12398767: {'name': 'Petya'}, 98765467: {'name': 'Lena'}}
    Ответ написан
    1 комментарий
  • Как фильтровать нецензурную лексику в telegram боте?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Опыт модерирования форумов рунета подсказывает что это все бесполезно.
    В русском языке очень много способом ругаться завуалированно. Посылать стихотворные формы.
    Метафоры. Можно печатать через пробел. Заменять кириллицу на похожие по начертанию
    Unicode символы. Печатать псевдографикой.

    Вобщем фильтрацией мата обычно занимаются админы канала. Более того. Если вы вводите
    интеллект который видоизменяет сообщения - то часть пользователей уйдут с канала. Эти
    либералы будут считать что у них есть свобода печати текста а вы - цензурите в авто-режиме.
    И есть мамкины хакеры которые будут день и ночь хачить ваш фильр мата и они его будут в конце
    побеждать. Потому что это борьба снаряда и брони - бесконечна. А вы - устанете вводить новые
    правила.
    Ответ написан
    Комментировать
  • Как фильтровать нецензурную лексику в telegram боте?

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

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

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

    @dmshar
    Ну, если "Все сверено с доками на официальном сайте" тогда, конечно, это вмешательство сверхъестественных сил все портит. Но что-то мне кажется, что не все сверено. Например, а сколько у вас пробелов стоит перед except. И что, в документации они там точно стоят? А можно ссылочку на такую документацию? Ну, и за одно, где тело блока try показано с двойной табуляцией?
    Ответ написан
    3 комментария
  • Допустимо ли воспроизведение программного обеспечения с точки зрения авторского права?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Код программы или игры, используемые в ней изображения, звуки, сюжет, сеттинг, игровая система (например, Dungeon&Dragons) могут быть защищены копирайтом. Название может быть защищено торговой маркой. В остальном самостоятельно сделать аналог вполне законно. На идеи и алгоритмы в России авторское право не распространяется.
    Ответ написан
    2 комментария
  • Как сделать нормальные глобальные переменные?

    SoreMix
    @SoreMix
    yellow
    Читаем в тему машин состояний, FSM Aiogram: https://docs.aiogram.dev/en/dev-3.x/dispatcher/fin...

    Там уже в зависимости от того, для чего нужна переменная. Судя по всему это не должно быть константой, тогда используем БД какую нибудь, если это должна быть переменная, которая может например правиться администратором/другим человеком и оставаться единой для всех.

    Если переменная задается на каком-то из этапов ввода ответа пользователя - FSM
    Если некое подобие конфига для всех пользователей - БД
    Ответ написан
    Комментировать