处理用户答案

时间:2020-09-12 07:50:21

标签: go telegram telegram-bot

任务是用户输入一笔保证金,我可以在这种情况下处理它,但它并不像一个简单的命令。 示例:

введите сюда описание изображения

我的代码:

func main () {
    testing()
    NewBot, BotError = tgBotApi.NewBotAPI(configuration.BOT_TOKEN)
    if BotError != nil {
        fmt.Println(BotError.Error())
    }
    NewBot.Debug = true
    fmt.Println("OK", time.Now().Unix(), time.Now(), time.Now().Weekday())
    setWebhook(NewBot)
    updates := NewBot.ListenForWebhook("/" + configuration.BOT_TOKEN)
    //go successfulPaymentListen()
    go http.ListenAndServeTLS(fmt.Sprintf("%s:%s", configuration.BOT_HOST, configuration.BOT_PORT), configuration.CERT_FILE, configuration.CERT_KEY, nil)
    for update := range updates {

        if update.Message != nil {
            recognizeCommand(update)
        } else if update.CallbackQuery != nil {
            if update.CallbackQuery.Data == "/addFunds crypto" {
                get_data.AddFundsChooseCurrencyCrypto(update, NewBot)
            } else if update.CallbackQuery.Data == "/addFunds qiwi" {
                get_data.AddFundsChooseCurrencyQiwi(update, NewBot)
            } else if strings.Split(update.CallbackQuery.Data, " ")[2] != "" {
                get_data.AddFundsChooseCurrencyCurrentCrypto(update, NewBot, strings.Split(update.CallbackQuery.Data, " ")[2])
                //This function is below
            }
        }
    }
}

get_data.AddFundsChooseCurrencyCurrentCrypto:

func AddFundsChooseCurrencyCurrentCrypto(update tgBotApi.Update, NewBot *tgBotApi.BotAPI, currency string) {
    chatUser := int64(update.CallbackQuery.From.ID)
    msg := tgBotApi.NewMessage(chatUser, "Input a sum of deposit:")
    NewBot.Send(msg)
    //There is I have to handle user answer, but I can't override ListenWebHook
}

问题是我需要ListenWebHook语言环境(在功能 AddFundsChooseCurrencyCurrentCrypto 中)而不是主要功能

------------------------更新------------------- -----

我已经尝试过此代码:

func AddFundsChooseCurrencyCurrentCrypto(update tgBotApi.Update, NewBot *tgBotApi.BotAPI, currency string) {
        chatUser := int64(update.CallbackQuery.From.ID)
        msg := tgBotApi.NewMessage(chatUser, "Input a sum of deposit:")
        NewBot.Send(msg)
         NewBotContext, BotError := tgBotApi.NewBotAPI(configuration.BOT_TOKEN)
         if BotError != nil {
            log.Panic(BotError.Error())
         }
        updates := NewBotContext.ListenForWebhook("/" + configuration.BOT_TOKEN)
        for update := range updates {
            fmt.Println(update)
        }
    }

但是错误:

panic: http: multiple registrations for /mytokenbot

goroutine 1 [running]:
net/http.(*ServeMux).Handle(0xe38620, 0xc25304, 0x2f, 0xc7dbe0, 0xc00018bec0)

1 个答案:

答案 0 :(得分:0)

您尝试向路由器注册相同的URL'/ mytokenbot'两次。您可以在net / http中找到错误:

https://golang.org/src/net/http/server.go#L2433

在多路复用句柄功能中。

因此,只需使用servemux查看代码中的register函数,然后检查一下如何调用它两次即可。