• Как через url отправить сообщение боту в телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Да, в upd всё верно написано, надо сначала получить chat_id. Это можно сделать, отправив боту любое сообщение, а потом с помощью вызова .../getUpdates его получить. В сообщении будет искомый chat_id. Далее можно на этот chat_id посылать сообщения. Если это всё для того, чтобы просто посылать в телеграм себе оповещения, то держать постоянно запущенного бота и не нужно, достаточно дёргать sendMessage по необходимости.
    Ответ написан
    Комментировать
  • AIOgram, как лучше обновить код рассылки, чтобы она не останавливалась из-за Flood control?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Не надо использовать time.sleep в асинхронном коде, это блокирует event loop! Вместо этого надо использовать асинхронный вариант asyncio.sleep.

    По существу с таким кодом будет делаться 10 отправок в секунду, а официально лимит 30 в секунду. Но лучше бы дополнительно отлавливать исключение с flood control и по нему делать дополнительный sleep хотя бы на 1 секунду, а то и чуть больше, чтобы счётчик числа попыток на стороне Telegram обнулился за это время.
    Ответ написан
    Комментировать
  • Как передать картинки в Телеграм?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Комментировать
  • Как объединить 'Привет' и message.text?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    bot.send_message(message.chat.id, 'привет '+message.text)

    или
    bot.send_message(message.chat.id, f'привет {message.text}')
    Ответ написан
    3 комментария
  • Ошибка при работе с модулем scapy Python Debian?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    "Сниффить" может только root.
    Ответ написан
    5 комментариев
  • Как лучше и правильно использовать gettext?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    gettext в простейшем варианте предполагает выбор одного языка, который в дальнейшем используется весь жизненный цикл приложения.

    Надо либо переключать язык на язык конкретного пользователя во всех нужных местах (что приведёт к частым переключениям и до кучи несовместимо с асинхронным кодом), либо использовать gettext в режиме class-based API.

    Похожий вопрос Как сделать мультиязычным приложение python?
    Ответ написан
    Комментировать
  • Как проверить JSON на обновления?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    upd: Каждый объект и каждый запрос имеют ID.
    ID каждого объекта больше предыдущего на 1.


    Помнить самый большой из id уже возвращавшихся, при каждом запросе проверять, нет ли id больше запомненного. Запросы делать с определёнными интервалами (sleep), чтобы их число в единицу времени не превышало лимитов (наприммер, если разрешено максимум 10 запросов в минуту, то нужно сделать интервал не меньше 6 секунд).

    Между прочим, getUpdates в библиотеках telegram используют примерно так же. Более того Bot API позволяет указать в параметре offset нужный id, чтобы в ответ вернулись только более новые.
    Ответ написан
    Комментировать
  • Как дать python программе права администратора?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Довольно кроссплатформенный способ запросить права администратора реализует модуль https://pypi.org/project/elevate/
    Ответ написан
    2 комментария
  • Как прикрутить чат телеграм в модальное окно или просто на сайт?

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

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Например,

    1. Сделать приватный канал, в который постить полные тексты публикаций. Соответственно, не подписавшись на этот канал, полный текст не увидеть.

    2. Сделать, чтобы полные тексты показывал бот, в который кидать идентификатор публикации через deep link, в боте проверять подписку.

    Но в целом пользователи часто относятся негативно к попыткам потребовать от них куда-то подписаться, это антипаттерн. Я в таких случаях или не пользуюсь таким поганым сервисом вообще, или удаляю этот навязанный канал сразу же, как получу всё что требовалось. Не потому что канал плохой, а потому что не приемлю подобного отношения.
    Ответ написан
    Комментировать
  • Traefik docker создает самоподписанные ssl сертификаты. Как отключить?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Для этого порт надо пробрасывать как tcp, не http/https.

    Но вообще-то это неправильная практика. Как раз на прокси/балансеры и вешают сертификат в таких случаях, а дальше терминируют трафик на http или на https с любым сертификатом.
    Ответ написан
    3 комментария
  • Как сделать возможность писать от лица бота через консоль?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    input - синхронная функция, она блокирует event loop. Для работы с консолью можно использовать асинхронную функцию ainput из модуля aioconsole.

    import asyncio
    from aioconsole import ainput
    
    async def main():
      s = await ainput('Enter something: ')
      print (f"You entered {s}")
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    Ответ написан
    Комментировать
  • Почему пишет значение NULL в столбце "id" если примаре кей?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    primary key и не обязан "сам заполняться" ни в одной базе. Даже в mysql это отдельная фича - auto_increment. А тут для этого нужен sequence или serial. См. например тут: https://www.postgresqltutorial.com/postgresql-serial/
    Ответ написан
    1 комментарий
  • Как правильно работать с большим количеством данных?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    70 Гб - это вообще не гигантский объём. Люди оперируют террабайтами и даже больше. Главная проблема не в объёме таблицы, а в том, чтобы не читать её целиком (full scan) при выполнении запроса. И вот тут главная фигня: одно только условие like '%слово%' в любом случае требует просмотреть каждую строку, значит, будет full scan. Обычные индексы по этому полю строить бесполезно. Есть всякие полнотекстовые, но в общем случае их тоже надо правильно готовить, чтобы работало приемлемо. Решение может зависеть от задачи. Например, если это ключевые слова в виде текстовой строки с пробелами или иными разделителями, то их можно вынести в отдельную таблицу отдельными строками и проиндексировать там, полнотекстовый поиск тут будет излишним.
    Ответ написан
    1 комментарий
  • Как вывести на экран приветствия в Linux Mint ip адрес?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    LinuxMint использует lightdm и slick-greeter. Как пишут в интернетах, там нельзя поменять текст сообщения, хотя можно скрыть hostname и настроить ещё немного опций. Чтобы чего-то сообщать юзерам, народ извращается с xmessage, zenity, gdialog и прочими инструментами, например.

    Вот в gdm можно поменять сообщение. Можно поменять используемый display manager в своей системе. Или только greeter. Это же Linux, тут много чего можно поменять по вкусу.
    Ответ написан
    Комментировать
  • Определение оператора сотовой связи и региона по номеру мобильного телефона, как сделать?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В России есть Россвязь, которая распределяет номерную ёмкость по операторам. Эта информация публична, можно скачать машиночитаемые выгрузки у них на сайте: https://rossvyaz.gov.ru/deyatelnost/resurs-numerac...

    Далее, в России есть MNP, позволяющий переносить мобильный номер от оператора к оператору. Но только в пределах региона. Поэтому если задача по номеру определять только регион, то она надёжно решается указанными выше выгрузками. Оператора по ним определять ненадёжно, так как ежедневно много номеров меняют оператора, и любые данные быстро устаревают.

    Оператором базы данных перенесённых номеров (БДПН) является ЦНИИС, на его сайте можно получить текущего оператора только по конкретному номеру: https://zniis.ru/bdpn/check/ а обновляемый доступ ко всей базе простым смертным не получить.

    Чтобы понимать масштаб проблемы, сейчас в России ~14.7 млн. перенесённых номеров, за вчерашние сутки ~9.5 тыс. номеров поменяли оператора и ~1.5 тыс. вернулись из списка перенесённых к своему родному оператору.

    Таким образом, никакого смысла в подобном сайте без обновляемого доступа к БДПН (а она обновляется каждые 2 часа) нет.

    Что касается технической реализации, то тут всё достаточно просто, если у тебя есть доступ к БДПН. ЦНИИС публикует раз в сутки Numbering_Plan, аналогичный выгрузке DEF-9xx.csv Россвязи (формат отличается, но смысл тот же - диапазоны, каждый назначен оператору+региону), также публикует раз в сутки Port_All с полным списком MNP. Если не нужно поддерживать (для простоты) частые (каждые 2 часа) обновления, то этого достаточно. Любой номер сначала проверяем на наличие в Port_All, если не нашёлся - ищем подходящий диапазон в Numbering_Plan.
    Ответ написан
    Комментировать
  • Аренда Ip у провайдера и подключение его к серверу в датацентре?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    BGP оперирует не IP-адресами, а автономными системами, которые должны быть не менее чем /24 (256 адресов). Судя по всему, у вас нет своей AS, а адреса принадлежат провайдерам.

    Я вижу только один способ сохранить прям те же самые адреса: сервер поместить в датацентр, а на старом месте оставить недорогой сервер для проброса нужных портов в целевой сервер в датацентр. Лучше подобное воспринимать как временное решение, всё переносить на новый IP сервера, переводить туда клиентов и всё такое, чтобы в дальнейшем когда-нибудь от лишних провайдеров отказаться.

    Если у оператора есть точка присутствия в датацентре, а текущий договор на юрлицо, то можно попробовать официально договориться с ним о том, чтобы подключиться к нему в датацентре и перености IP, но у оператора моугт быть (и скорее всего будут) свои нюансы устройства сети, которые это не позволят.
    Ответ написан
    Комментировать
  • Как адаптировать код php под FreeBSD?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Просто вынести содержимое блока while(true) { ... } из цикла и убрать sleep, тогда вместо бесконечного цикла скрипт будет делать то же самое всего один раз. После этого скрипт можно гонять через cron.

    Вопрос чисто по php, остальные тэги лишние.
    Ответ написан
    Комментировать
  • Какие существуют способы бесплатной интеграции whatsapp в битрикс?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Бесплатных легальных сервисов для интеграции WhatsApp (т.н. WhatsApp Business API) нет. Есть нелегальные (не очень дорогие), основанные на имитации взаимодействия с WhatsApp Web, но с ними есть риск получить бан, так что как минимум особенно ценный номер телефона я бы таким в любом случае не доверил.
    Ответ написан
    Комментировать
  • Не запускается проект Github. Прошу помощи?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Можно не клонировать скрипт, а скачать его архивом, нажав Code-Download ZIP.

    Скрипт можно отредактировать локально, git для этого не нужен.

    В 18 строке падает из-за того, что скрипт берёт сенсор с индексом 1 (при нумерации с нуля), а массив сенсоров на этом компьютере имеет длину меньше 2, возможно даже, что нужные сенсоры ядро не понимает и список пустой. Вообще, скрипт, судя по этому месту, какой-то ацкий говнокод, который сломается просто от изменения порядка вывода сенсоров в модуле psutil. Фу на его автора.

    От себя советую избрать путь настоящего джедая: всё то же самое можно получать стандартными командами:

    Информация по процессорам: lscpu
    Информация по процессам: top или более красиво htop (выход у обоих по кнопке q)
    Информация по памяти: free -h
    Информация по сенсорам (температура, вентиляторы и всё такое): sensors
    Информация по месту на дисках: df -h
    Информация по блочным устройствам дисков: lsblk

    Доустанавливать надо будет только пакеты htop и lm-sensors.

    Ну или можно просто использовать виджеты для используемого десктопа.
    Ответ написан
    Комментировать