• Можно ли получать ид юзера зная его юзернейм?

    shurshur
    @shurshur
    Средствами Bot API невозможно по username получить id. Серьёзни, никак. Я недавно отвечал на похожий вопрос https://qna.habr.com/q/1224466

    Но в указанном узком сценарии возможно сделать такое, но с оговорками.

    Во-первых, придётся явно сохранять связку username-id для всех пользователей, пишущих боту.

    Во-вторых, не у всех пользователей есть username.

    В-третьих, пользователь может в любой момент сменить свой username, и бот об этом не узнает.

    По реализации всё достаточно просто: при каждом поступающем сообщении запоминаем пару username-id в базе, а для нужной команды достаём.
    Ответ написан
    Комментировать
  • Как писать в личку тем кто покинул канал?

    shurshur
    @shurshur
    Изначально бот мог писать только тем пользователям, которые по своей инициативе первыми написали боту. После одного из обновлений появилось дополнительное правило: бот может писать пользователям, которые подписаны на канал, в котором данный бот числится админом. А также если пользователь перешёл по ссылке-инвайту и оставил заявку на вступление. Если же пользователь покинул канал, то ни одно из этих условий выполняться не будет, и отправка сообщений таким пользователям невозможна никак.
    Ответ написан
  • Не отправляются фотографии пользователю в библеотеке telebot, что делать?

    shurshur
    @shurshur
    Не надо выкладывать такую длинную простыню, в которой трудно что-либо найти...

    Ссылка https://photos.app.goo.gl/6LckVsFKRfKy9ANu6 не является прямой ссылкой на фотографию, да и страница, на которую эта ссылка делает редирект, не является фотографией.
    Ответ написан
  • Состояния в FSM срабатывают со второго раза. Как это исправить?

    shurshur
    @shurshur
    Как написано - так и работает. Делаем /start - получаем стейт choice и кнопки. Нажимаем "добавить задачу" - получаем стейт add_task и больше в этом обработчике ничего не делается! И только после второго нажатия срабатывает обработчик "добавить задачу" из стейта add_task.

    Правильно убрать вообще обработчик для choice и вместо этого указать условия вида state=choice непосредственно у всех обработчиков.
    Ответ написан
    1 комментарий
  • Как получить ид пользователя по его упоминанию?

    shurshur
    @shurshur
    В Bot API невомзожно получить id пользователя по его имени. Возможно только через получение события, с этим пользователем связанное (например, пользователь написал сообщение, пользователь вступил в группу где есть бот, итд). В полученной информации будет и id пользователя, и его username (только если он у пользователя есть).

    Это можно обойти использованием клиентского API (библиотеки telethon, pyrogram). Но этот API выполняет запросы от реального пользователя Telegram, поэтому если злоупотреблять запросами, можно получить бан не бота, а прям своего живого аккаунта.

    От себя рекомендую этой фигнёй не страдать, у Bot API есть свои понятные сценарии работы, и в рамках них id пользователя можно получить вполне легально именно тогда, когда это имеет смысл в рамках функциональности бота.
    Ответ написан
    Комментировать
  • Возможно ли написать Viber-бот на Java или Android для просевания сообщений viber-чата?

    shurshur
    @shurshur
    Viber Bot (в девичестве Viber Public Account) невозможно добавить в чат. Он может лишь принимать личные входяшие сообщения от пользователей. Да, это сильно меньше, чем позволяет Telegram, но, к сожалению, других возможностей нет.
    Ответ написан
    Комментировать
  • Существуют ли альтернативы LaTeX/TeX?

    shurshur
    @shurshur
    Такой вопрос надо начинать с предметной области. Какая она? Если это текст с формулами, то ничто другое даже близко не сравнится по удобству.

    Корректировка макета страницы в TeX вообще обычно не представляет проблемы, а в упомянутом примере именно это и требовалось. Более того, скилл поиска ответов по вопросам, связанным с TeX, прокачивается достаточно быстро. Есть много списков команд различной степени подробности, куча готовых решений (в том числе поиском на этом сайте и SO), множество всевозможных пакетов в CTAN...

    Вообще, TeX умеет безумно сложные вещи, о которых многие даже не подозревают. Например, в знаменитом TeXbook от автора TeX есть пример рисования кривых дракона. Язык TeXа является тьюринг-полным.
    Ответ написан
    Комментировать
  • Как добавить новый диск в zfs raid?

    shurshur
    @shurshur
    Я ввёл в гугле "zpool replace disk in mirror" и получил вагон ссылок по теме, первая же из которых ведёт на официальную документацию на русском языке на сайте Oracle.
    Ответ написан
    Комментировать
  • Как исправить ошибку discord python bot?

    shurshur
    @shurshur
    Тут сразу несколько ошибок.

    Во-первых, класс discord.ext.commands.Bot унаследован от discord.Client - он расширяет возможность последнего функционалом команд. Использовать оба не нужно.

    Во-вторых, созданный экземпляр этого класса bot нигде не используется.

    В-третьих, в классе discord.Client нет декоратора command - он есть только в commands.Bot.

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

    Правильно discord.Client вообще выкинуть - он тут не нужен.
    Ответ написан
    Комментировать
  • Как обслуживать юзеров по очереди телебот?

    shurshur
    @shurshur
    У тебя глобальные urls_list, price_list. Перемести их в функцию sender, они всё равно при каждом её вызове должны инициализироваться заново. Именно это и вызывает сейчас проблемы.
    Ответ написан
    Комментировать
  • Почему postgresql создаёт ещё одну директорию?

    shurshur
    @shurshur
    Потому что внутри образа postgres:13.3 анонсируется том /var/lib/postgresql/data. Поскольку он никак не описан при создании контейнера, создаётся анонимный том в стандартном хранилище и монтируется в контейнер. То, что в манифесте также объявлен ещё один том, никак не влияет на автосоздание вот этого. В итоге у нас два тома, один описан явно и смонтирован в /app/app/database/pgdata, другой описан в образе и смонтирован в /var/lib/postgresql/data.

    Правильно монтировать свой том в /var/lib/postgresql/data, именно там образ будет хранить базу.

    Посмотреть, что думает образ, можно командой docker inspect postgres:13.3
    Ответ написан
    Комментировать
  • Как правильно спарсить характеристики с сайта и записать в отдельные колонки эксель?

    shurshur
    @shurshur
    Например, можно автоматически создавать колонки под недостающие параметры по мере анализа. Можно завести словарь, который отображает названия характеристик в номер колонки, если при парсинге страницы обнаружена новая характеристика, которой в словаре нет - добавлять новую запись со следующим номером колонки. При создании новой строчки в выходнойм файле по именам параметров определять их позиции в массиве и подставлять.

    Другой вариант: разные категории помещать на разные листы (в случае с csv писать в разные файлы, ну или перейти на xlsxwriter). В этом случае таблица будет не такой разреженной, что в некоторых случаях может быть более удобно удобно.
    Ответ написан
    Комментировать
  • Как исправить ошибку Email rejected per DMARC policy?

    shurshur
    @shurshur
    Чтобы отправлять почту, в наше время нужно выполнить много условий?

    1. Нужна PTR-запись для IP отправителя, и должна существовать соответствующая A-запись (например, 111.22.33.44 указывает на mail.site.ru, должна существовать A-запись для mail.site.ru, необязательно на тот же IP).

    2. Нужно описать SPF (TXT-запись с v=spf1 у домена site.ru), по которому данный IP должен быть доверенным для отправки почты.

    3. Нужно настроить DKIM и подписывать письма ключом, публичная часть которого описана в DNS.

    4. Должна быть описана политика DMARC в TXT-записи _dmarc.site.ru. При этом если там указано p=reject, то получателю предписывается полностью отвергать почту от недоверенных отправителей.

    Вот вероятнее всего что-то из этого сделано не так.

    Полезно также использовать https://mxtoolbox.com/DMARC.aspx и другие инструменты на том же сайте (отдельная благодарность paran0id за напоминание).
    Ответ написан
    5 комментариев
  • Как посмотреть где находится файл в Кали линукс?

    shurshur
    @shurshur
    Набираем locate имя_файла. Если ругается что такой команды нет - ставим то что предлагает (думаю, в кали такой же подсказыватель, как в убунте) - и команда появится. При установке вроде даже должен сразу и базу создать, если нет - запустить updatedb из-под root.

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

    shurshur
    @shurshur
    Никак. Контент в WhatsApp - это либо текст, либо изображение или несколько (возможно, с сопроводительным текстом), а не текст с картинками в качестве сопровождения. Так что только отправлять несколько сообщений по очереди.
    Ответ написан
    Комментировать
  • Почему сумма ряда Тейлора не верна?

    shurshur
    @shurshur
    Формула Тейлора имеет смысл лишь в небольшой окрестности рассматриваемой точки, и чем меньше окрестность, тем выше точность величины, которая рождает формула. Естественно, x=20 находится в очень даже большой, просто огромной окрестности точки x=0, в которой было взято разложение исходного квадратного косинуса.

    Можно улучшить точность, если перевести аргумент в интервал периодичности значения (0,2pi), затем в (0,pi) с учётом знака, затем в (0,pi/2) с учётом симметрии относительно pi/2, затем в (0,pi/4) с заменой синуса на косинус, если аргумент превышает pi/4. Это уже будет намного лучше, но если аргумент заметно отличается от нуля, то точность просядет очень быстро.
    Ответ написан
    Комментировать
  • Как ботом подписаться на канал?

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

    shurshur
    @shurshur
    Универсальный шифрованный канал для любых задач легко обеспечивается любым VPN с шифрованием. Можно openvpn/wireguard/ipsec или что ещё душе угодно. Как вариант, можно использовать stunnel для превращения нешифрованного tcp-соединения в шифрованное, это для некоторых задач может быть проще.

    Для синхронизации удобно использовать rsync (поверх ssh, то есть он сразу шифрованный).

    Готовые решения постоянной синхронизации: lsyncd (обёртка над rsync, синхронизирует в одну сторону; важно ни в коем-случае не запускать два экземпляра в обе стороны, так как риск синхронизации не в ту сторону крайне высок!), https://github.com/stephenh/mirror (неплохо работает и умеет синхронизировать в обе стороны, но в моих экспериментах всё же случались синхронизации не в ту сторону, хоть и очень редко), syncthing (тоже умеет в обе стороны, не тестировал). Но в целом можно просто запускать rsync по планировщику.
    Ответ написан
    Комментировать
  • Как исправить эту ошибку docker-compose?

    shurshur
    @shurshur
    Идём сюда: archive.ubuntu.com/ubuntu/dists и видим, что там нет релиза hirsute. Зато он есть тут: https://old-releases.ubuntu.com/ubuntu/dists/ , так что меняем archive.ubuntu.com на old-releases.ubuntu.com. Ещё лучше, конечно, обновить Dockerfile на более новую версию убунты, но может потребоваться разобраться в разных нюансах (какой-нить пакет иначе называется, какие-то конфиги в другом месте лежат и всякое такое).
    Ответ написан
    4 комментария
  • Как перебрать всех пользователей, и узнать создателя беседы?

    shurshur
    @shurshur
    Telegram Bot API не предоставляет возможности получить список участников чата. Это можно сделать только с помощью клиентского API (его реализует, например, библиотека telethon).

    Однако если id пользователя известен (можно, например, отслеживать ботом сообщения о вступлениях в чат, запоминая всех, кто вошёл в чат после бота), можно проверить его роль в чате с помощь метода get_chat_member. Но основатель чата, очевидно, будет в нём всегда самым первым пользователем до любого бота.
    Ответ написан
    Комментировать