• Как сделать аналог google play на wordpress?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Магазин приложений - это прежде всего про удобную их установку. Скачивать apk с сайта, разрешать установку из недоверенных источников - это неудобно и отпугивает. Для магазина приложений нужно приложение-установщик. Которое в идеале ещё и в Google Play либо в штатные прошивки каких-то телефонов надо будет протолкнуть, чтобы пользователям не приходилось его с бубном устанавливать.

    Вопросы монетизации для авторов приложений, вопросы привлечения именитых разработчиков и дистрибьюторов я даже разъяснять не буду - тут и так всё понятно.

    На вордпрессе можно сделать в лучшем случае блог о приложениях со ссылками на их apk. Но это даже не 5% от того, что нужно для "аналога Google Play". И да, не надо делать как те недавно высмеянные дельцы, которые с пафосом презентовали "российский play", оказавшийся переименованным f-droid...
    Ответ написан
    Комментировать
  • Как отправить сообщение от телеграм-бота на 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


    Если совпадают то не повышать репутацию.
    Ответ написан
    Комментировать
  • Как перенаправить трафик пользователя через gateway интерфейс используя iproute2 или iptables?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    iptables -m owner -h

    Маркируем пакет от пользователя (-j MARK) и затем policy routing (ip rule add fwmark XXX lookup vpn) перекидываем в другую таблицу маршрутизации.
    Ответ написан
  • Хочу сделать смену префикса бота командой, но получаю ошибку, как исправить?

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В чём глубокий смысл перезатирать $link результатом запроса?

    $link = mysqli_query($link, "SELECT * FROM 'table-name' WHERE USER_ID = 1620");


    Я уж не говорю о том, что дефис в имени таблицы это чересчур...
    Ответ написан
    Комментировать
  • Как использовать слэш команды в дискорде с помощью бота?

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

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

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

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    По умолчанию при монтировании файловой системы ставится флаг dirty (для тех, которые имеют поддержку такого флага, а обычные fs для Linux все имеют), а при размонтировании снимается. Если dirty не установлен, то fsck при простом запуске (без дополнительных параметров при запуске из командной строки или через флаг в fstab) не выполняет фактическую проверку файловой системы (точнее, всё же выполняет иногда - через определённое количество монтирований или по прошествии некоторого количества месяцев, но это отдельная настраиваемая история). Просто сразу пишет filesystem clean.

    Если отмонтирование не выполнено корректно (например, система была перезагружена без завершения как надо или флешка была резко выдернута), то fsck будет пытаться восстановить файловую систему. При этом на файловых системах с журналированием это может быть сделано достаточно быстро с помощью replay journal. Если же восстановить легко не получилось, то система выкинет в Shell с предложением прогнать fsck самому. В принципе, если файловая система ещё не превратилась в мелко нашинкованные макароны, это может пройти весьма успешно даже с жёсткими флагами fsck -f -y. Но тут уж пользователь сам берёт на себя ответственность.

    В общем, проверка файловой системы при запуске происходит по сложным правилам, в том числе на основе указанных в fstab параметров. Кроме того, с помощью fsck.*-параметров загрузки ядра (в данном слуаче через grub) можно явно попросить systemd изменить поведение по умолчанию и, например, принудительно проверить файловую систему, даже если она была отмонтирована корректно. Если эти параметры передать в загрузчик вручную через редактирование в самом grub при загрузке, то на последующие перезагрузки это изменение не повлияет.
    Ответ написан
    1 комментарий
  • Какие библиотеки позволяют писать и юзерботов и ботов телеграмм?

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

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Из lua можно вызывать код, написанный на C/C++. Соответственно, требуемый функционал оформляем в виде библиотеки, которую используем в скриптах.
    Ответ написан
    Комментировать
  • Неправильно работает анти-флуд в боте телеграм, что делать?

    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% или его надо как-то иначе запускать.
    Ответ написан
    Комментировать
  • Можно ли восстановить бота в телеграмме после удаления у фазербота?

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

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо ловить абстрактный Exception вообще никогда! Тем более игнорировать его и даже не выводить в консоль. Произошла ошибка, а какая, почему произошла - ваще непонятно.

    Какие тут могут случиться ошибки? Ну, например, если в user_dict нет записи с ключом chat_id, то случится KeyError. Или если в getRegData возвращается невалидный markdown-текст, то случится ошибка ApiException.

    А далее после обработки exception путём его игнорирования тут снова вызывается register_next_step_handler, который приводит к тому, что вводимые пользователем данные снова попадают в тот же обработчик и - вероятно - натыкаются на ту же самую ошибку. Например, KeyError: конечно, ведь как при прошлом запуске этого обработчика не было значения с таким ключом, так и при последующих не появится.

    До кучи, не надо вызывать постоянно bot.get_me(). Это каждый раз будет вызов API. Неужели имя бота меняется каждую минуту? Достаточно запомнить при запуске бота - и достаточно.
    Ответ написан
    Комментировать
  • Как отправить сообщение от лица бота в чат где он состоит?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    И в чат так же можно, если у бота есть доступ к написанию сообщений в группу и в качестве chat_id передан правильный id чата.
    Ответ написан
  • Как преобразовать property в dict (Python)?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    event_json = HttpRequest.read()
    Ответ написан
    8 комментариев