• Как оправлять команды у бота Telegram при выборе в меню?

    landergate
    @landergate
    IT-шный jack-of-all-trades
    Не пойму, как отлавливать, какую из 3х клавишей нажал?
    и как сделать так, чтобы в меню был один текст, а при нажатии на нее отправлялась к примеру команда?

    С помощью Inline Keyboards, появившемся в Bot API 2.0.
    https://core.telegram.org/bots/2-0-intro#new-inlin...
    https://core.telegram.org/bots/api#inlinekeyboardmarkup

    > Unlike with custom reply keyboards, pressing buttons on inline keyboards doesn't result in messages sent to the chat. Instead, inline keyboards support buttons that work behind the scenes: callback buttons, URL buttons and switch to inline buttons.

    Как на этапе отправки текста, мы знаем, что нам надо перевести текст?

    При приёме сообщения от user_id, бот проверяет, на каком шаге в последний раз остановился этот user_id, и обрабатывает сообщение в рамках текущего шага. Если шаг "перевести" - то в ответ на любое сообщение он переведёт строку. На этапе "перевести" бот просто не показывает никакого меню, он просто ждёт строку.

    Для этого боту делают хранилище сессий. Это может быть просто БД с колонками `user_id` и `state`, где в стэйте будет указан текущий шаг. При обработке сообщения, бот смотрит шаг и действует в соответствии с тем, чего хотел пользователь на этом шаге.
    Если пользователь запросил другую функцию, или сделал /cancel, поменять шаг в таблице.
    Ответ написан
    8 комментариев
  • Как последовательно телеграм боту получить последоватльные значения от юзера?

    @nllm
    Для каждого вопроса/шага фиксировать состояние.
    Например: отправили первое сообщение, поставили состояние "ожидание ответа №1", получили ответ, отправили следующий вопрос, сменили статус и т.д.

    Состояния фиксируем в сессиях, в базе, в файлах (как решите)
    Ответ написан
    3 комментария
  • Как выполнить условие в PHP?

    @nllm
    Надо фиксировать текущее состояние пользователя бота, с кем идет диалог.
    Описать правила, какие команды при каких состояниях могут выполняться.

    При команде "Оставить отзыв" менять состояние на ожидание ввода отзыва. После команды "Стоп" состояние меняете на ожидание ввода команд.
    Ответ написан
    Комментировать
  • Почему если в SELECT * добавить COUNT() покажет одну строку?

    bingo347
    @bingo347
    Crazy on performance...
    Потому что COUNT() - это агрегатная функция.
    Делайте группировку по какому либо столбцу, и строк в результате будет ровно столько, сколько уникальных значений в данном столбце, и подсчет COUNT будет по этим значениям. Без группировки подсчет будет по всей выборке.
    Либо делайте отдельными запросами вывод строк и подсчет.
    Ответ написан
    2 комментария
  • Чем PHPMailer отличается от обычной mail() функций??

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Функция mail() в PHP по сути вызывает встроенную в систему почтовую программу - стандартно, это sendmail в linux (также, возможно использовать qmail, postfix, но для этого надо сначала сконфигурировать PHP через .ini файл).
    Подробнее про Mail в PHP: https://www.php.net/manual/ru/book.mail.php
    И про основную проблему кроссплатформенного использования: https://habr.com/ru/post/26518/

    PHPMailer - это мощная библиотека, реализующая почтовые транспорты, а не использующая sendmail как стандартная mail() функция. Имеет из коробки большое количество возможностей, таких как (в списке представлена лишь малая часть):
    • полная поддержка SMTP, Qmail, POP3, IDN, DKIM;
    • поддержка SSL и TLS;
    • работает на любой win32 и *nix платформе;
    • гибкость отладки;
    • определяемые вручную заголовки писем;
    • совмещение нескольких сообщений и вложений;
    • встроенная поддержка изображений;
    • умеет посылать письма с множественными: адресатами (TO), копиями (CC), BCC и REPLY-TO;
    • многослойные/альтернативные сообщения для клиентов, которые не могут читать HTML письма;
    • поддержка 8 бит, base64, бинарного режима, и пригодного для печати формата;
    • перенос слов (word wrap);
    • сообщения в виде HTML (шаблоны);
    • библиотека проверена на множестве SMTP серверах: Sendmail, qmail, Postfix, Imail, Exchange, Mercury, Courier;
    • библиотека используется под капотом таких гигантов: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla;

    Подробнее можно прочитать тут:
    https://jino.ru/journal/articles/pochta-phpmailer/
    https://www.sesmikcms.ru/pages/read/ischerpyvajusc...

    Помимо PHPMailer существуют и другие крутые библиотеки, оставляю список для интересующихся:
    Swiftmailer
    (Symfony) Mailer

    Если вы активно пользуетесь функцией mail() при разработке на PHP и до сих пор ещё не сталкивались с проблемами при её использовании на хостингах или на своих собственных серверах без соответствующего правильно настроенного окружения, то mail() вам идеально подходит. А когда столкнётесь с проблемами или захотите иметь больше возможностей из коробки, станут очевидными плюсы PHPMailer и других специализированных библиотек.
    Ответ написан
    1 комментарий
  • Rest api это обработка запросов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда отвечателей понесло не в ту степь. Здесь вопрос не "что такое REST API". Автор не понимает что такое вообще API.

    "Просто" просто хтмл страница, как и " нехитрая таблица" - это пользовательский интерфейс. Странички, на которые живые пользователи смотрят глазками.

    А API - это программный интерфейс. То есть запрос к серверу делает программа. И читает ответ тоже программа. Которой твои таблички сто лет не сдались. И которой нужен программно-читаемый ответ. который программа прочтет и потом уже будет строить таблички. Или не будет - это уж как она сама решит.

    То есть REST API - это когда запрос к твоему веб-серверу делает не браузер по запросу пользователя, а программа. Эта программа может быть либо написана на яваскрипте и исполняться в браузере, либо написана на чем угодно и обращаться с другого сервера.
    При этом для работы API используется стандартная обработка запросов, которая входит по умолчанию в любой веб-сервер (в том числе апач)
    Ответ написан
    Комментировать
  • Как растянуть row?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    container-fluid?
    Ответ написан
    1 комментарий
  • Как вставить переменную в текст без соединения точками, если в тексте уже есть двойные ковычки?

    DevMan
    @DevMan Куратор тега PHP
    да просто вставить - кавычки в переменной никак не роялят.
    Ответ написан
    3 комментария
  • Как организовать хранение файлов на сервере?

    @marazmiki
    Укротитель питонов
    Правильно ли я понимаю что для хранение файлов их нужно разбивать по папкам,

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

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

    А на боевых серверах использование хранилища в локальной файловой системе и вовсе нонсенс. Там эта проблема не стоит в принципе.

    Сегментацию можно сделать для, скажем так, красоты. Или чтобы было понятно, кому принадлежит тот или иной файл. Но практическая польза от неё сомнительна. Вреда, впрочем, тоже нет :)

    допустим на сервер пользователь с Ником username заливает файл file.mp4, и я сохраняю этот файл по пути u/us/use/user/usern/file.mp4 и такой путь формируется для каждого пользователя

    Опять неправильно.

    Во-первых, никогда, НИКОГДА не доверяйте данным, пришедшим от пользователя. Сохраняете загруженный файл – сгенерируйте имя сами. А оригинальное имя не возбраняется сохранить и в другом месте. Если понадобится дать возможность пользователю сохранить файл под оригинальным именем, это делается в несколько строк.

    Во-вторых, Ваша сегментация слишком агрессивная. Если представить, что юзернейм может состоять только из строчных латинских букв и цифр (итого алфавит 26+10=36 символов), то такое хранилище сможет вместить 36 ^ (1 + 2 + 3 + 4 + 5) = 36^15 = 2.21 * 10^23 файлов без повторений. А что если юзернейм короче 5 символов? А что если он переименуется?

    Помните "во-первых"? Так как нам нужно самим придумать имя файла, почему бы не воспользоваться либо UUID и сгенерировать уникальное (с высокой достоверностью) значение вида 28c5a6d8-f7b5-440f-aeaa-150e4fd0bebc, а его уже сегментировать? Например, два сегмента по два символа датут прикольные ссылки вида 28/c5/28c5a6d8-f7b5-440f-aeaa-150e4fd0bebc и возможность разместить 65 тысяч файлов так, чтобы они были по одной штуке в директории :)

    Есть также вариант использовать не UUID, а посчитать контрольную сумму файла и взять её в качестве имени. Практическая ценность такого хеша, правда, тоже стремится к нулю :)

    если будет 2 одинаковых названия файла у одного пользователя то просто добавляю к новому файлу номер (file1.mp4)

    Если речь идёт о Джанге, то она сама так делает, это штатная функция хранилища.
    Ответ написан
    1 комментарий
  • Жёсткие диски "для видеонаблюдения": реальная необходимость или маркетинг?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Ответ написан
    Комментировать
  • Как опубликовать свою игру в плей маркете?

    vabka
    @vabka
    Токсичный шарпист
    Вам нужно собрать свою игру в apk, завести аккаунт разработчика и пройти процедуру публикации.
    Как собрать её в apk в вашем случае не известно, тк не дан код.
    Если там чистый питон, без фреймворков для разработки мобильных приложений, то, скорее всего, придётся переписать
    Ответ написан
    4 комментария
  • Какую книгу посоветуете по PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Котеров, как обычно.
    Но зумерам, которым надо обязательно чтобы автор вприсядку танцевал и прибуатками сыпал, не зайдёт.
    Ответ написан
    1 комментарий
  • Почему многие крупные сайты тормозят по самые помидоры?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    7 баллов из 100. Я такого еще не встречал

    Потому что это крупный бизнес. А не ИП или средний бизнес где основная логика - дрочь с баллами page speed insight.
    Ответ написан
    12 комментариев
  • Стоит ли использовать конструкцию picture в современной верстке?

    SagePtr
    @SagePtr
    Еда - это святое
    Проще делать так: целая, половинная, четвертинная, и т.д. (до 320 пикселей, к примеру, более мелкие уже не делать). И цифры получатся красивые, и интерполяция более ровная (засчёт степеней двойки), и изображений получится не так много.
    Другой вариант - отобрать самые популярные разрешения экрана и под них подгонять размеры (при условии, что слайдер на полную ширину окна и составляет 100vw) - тогда у большинства пользователей изображение не будет растягиваться, а будет выбираться соответствующее текущему разрешению экрана (но тут вертикальная полоса прокрутки может испортить весь перфекционизм).
    Ответ написан
    Комментировать
  • Mysql syntax error ошибка?

    @mSnus
    У вас получается time={}16:27, то есть фигурная скобка закрылась раньше времени
    Ответ написан
    Комментировать
  • Почему строки не равны?

    DevMan
    @DevMan Куратор тега PHP
    потому что они равны.

    не нужно темнить, пишите проблему сразу.
    Ответ написан
    1 комментарий
  • Как записать время по русски в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИКАК не записывать!

    Вместо этого хоть немного узнать как работают базы данных.
    В mysql есть тип данных time - вот его надо поставить для колонки duree и писать в него только длительность.
    А минуты добавлять при выводе. Хоть на русском, хоть на китайском.

    И почитать про нормальную защиту от SQL инъекций.
    Вот эта фигня - str_replace("'","\'" - это мёртвому припарки.
    Ответ написан
    3 комментария
  • Как правильно адаптировать сайт под мобильные устройства?

    @66demon666
    По навыкам джун - по факту безработный
    Если вы задаете этот вопрос - вы НЕ умеете работать с медиа-запросами
    Ответ написан
    Комментировать
  • Как запустить JavaScript из адресной строки браузера?

    kartovitskii
    @kartovitskii
    Fullstack
    Просто напиши в адресную строку:

    javascript: alert(1);

    где alert(1) - твой код js
    Ответ написан
    Комментировать
  • Какие недостатки у такой авторизации?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Есть такая русская пословица, "дурная голова ногам покоя не даёт".
    Вот она про это "изобретение".
    Ответ написан
    Комментировать