Ответы пользователя по тегу API
  • Что выбрать для телеграм бота? Вебхуки или лонгполлинг?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    "Long polling" периодически опрашивает телеграм сервер, за счёт этого пользователю будет казаться, что бот "торзмозит", т.к. между отправкой сообщения от пользователя и до получения ответа будут паузы.
    По крайней мере у меня было именно так.
    Еще стоит сказать о том, что "Long polling" не подойдёт если говорить о нагрузках.

    После перехода на WebHook'и - сразу заработало всё очень резво.
    Также с использованием WebHook'ов у вас будет возможность горизонтально масштабировать бота в случае роста нагрузок.
    Если бы у меня стояла такая задача - я бы использовал WebHook'и.
    Ответ написан
    3 комментария
  • Проблема с склеиванием строк, где ошибка в коде?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Нужно внести правки в этот блок кода
    for res_select_list.Next(){
        err18 := res_select_list.Scan(&ucp.Id, &ucp.Text)
        if err18 != nil {
            panic(err18)
        }
        str.WriteString("LIST QUESTION:\r\nID- " + strconv.Itoa(ucp.Id) + " TEXT- " + ucp.Text)
    }


    Сделать вот так
    str.WriteString("LIST QUESTION:\r\n")
    for res_select_list.Next(){
        err18 := res_select_list.Scan(&ucp.Id, &ucp.Text)
        if err18 != nil {
            panic(err18)
        }
        str.WriteString("ID- " + strconv.Itoa(ucp.Id) + " TEXT- " + ucp.Text + "\r\n")
    }
    Ответ написан
    4 комментария
  • Проблема с отправкой сообщения, как решить?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Предполагаю вам нужно запрос в базу переместить в MessageNew.
    Т.е. алгоритм должен быть таким:
    - вы получили запрос /dump
    - сделали запрос в базу
    - в цикле извлекли данные и записали их в Buffer
    - одним сообщением ответили данными из Buffer

    Например так:
    lp.MessageNew(func(_ context.Context, obj events.MessageNewObject) {
        // тут приходит новый запрос
        if obj.Message.Text == "/dump" {
           var str strings.Builder
           // читаете данные из базы
           res, err := db.Query("SELECT `report_id`, `content_type` FROM `xf_report` WHERE `report_state` = 'open'")
           // по одном их обрабатываете и записываете в strings.Builder
           for res.Next(){
            err := res.Scan(&report.Report_id, &report.Content_type)
            str.WriteString(...)
          }
          // тут у вас все данные собраны в str
          // отправляете данные в ответ
          send, err2 := vk.MessagesSend(api.Params{
              "peer_id": 2000000001,
              "random_id": 0,
              "message": str.String(),
            })
        }

    Я убрал из кода обработку ошибок и т.д., чтобы вам было лучше видно суть.
    Ответ написан
    6 комментариев
  • Golang vksdk, проблема с типом данных, как решить?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    вместо b.MessageIDs(obj.Message.ID) напишите b.MessageIDs([]int{obj.Message.ID})
    Ответ написан