Задать вопрос
  • Пишу код для Telegram Бота, как не делать тупые ошибки?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, это возможно, но придётся вместо Bot API использовать клиентский API (с протоколом MTProto). Тут наиболее распространены библиотека telethon для Python и официальная библиотека tdlib.
    Ответ написан
    Комментировать
  • В чем преимущества процессов над потоками?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Вопрос уровня "в чём преимущества грибов над ягодами?" Это просто разные вещи со своими особенностями и нюансами, и нет смысла говорить о преимуществе одних или других без конкретного описания условий и требований.

    На самом деле процесс и поток в реализации конкретной OS могут быть близки до такой степени, что потоки могут быть видны даже в списке процессов. Поэтому вполне можно сказать, что это практически одно и то же. Но не совсем.

    Для создания нового процесса в UNIX-системах делаетя вызов fork, который создаёт полную копию текущего процесса, включая его код и данные (в других системах может не быть fork, но есть свои способы создания процесса). Для создания же нового потока также делается новый "процесс", но вместо копии данных и кода в нём передаётся ссылка на те же самые данные и код (очень по-питоновски - ссылка вместо deepcopy данных). Поэтому потоки могут работать с одними и теми же данными, а самостоятельные процессы нет. Но иногда это как раз и нужно. Например, потоки должны как-то отслеживать конфликты с доступом к одним и тем же данным, а для процессов такой проблемы не стоит.

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    RuntimeWarning: coroutine 'test' was never awaited

    Вызов test без await. Вообще, ей и не нужен async, потому что запускается в треде.
    Ответ написан
  • Sql запрос UPDATE, что делать?

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

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

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

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    SELECT COUNT(DISTINCT category) FROM your_table_name
    Ответ написан
  • Как в 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 комментария
  • Как сделать аналог 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 комментарий