100 人民币或等值 USDT-解决 telegram bot 开发问题

281 天前
 killerzhangsan

在 api 要怎么发消息,才能够知道输入的内容是上一次点击的按钮触发的?

2278 次点击
所在节点    Telegram
31 条回复
GooMS
281 天前
这个做个会话就好了,热门库看文档基本都有
killerzhangsan
281 天前
@GooMS 比如说那个库来做会话? java 有么?会话怎么关联到对应的按钮?
drymonfidelia
281 天前
@killerzhangsan 我知道你的意思了,在数据库里存用户最后一次点的按钮名字啊,不想用数据库就用 redis
微信公众号也是这么开发的
WordTian
281 天前
@killerzhangsan CallbackQuery 里面有个 data 字段,这个字段的值就是你自定义按钮时写的 callback_data 的值
https://docs.python-telegram-bot.org/en/v13.2/telegram.callbackquery.html#telegram.CallbackQuery.data
killerzhangsan
280 天前
@WordTian 不是这个问题。看上面回复。
drymonfidelia
280 天前
@killerzhangsan botfather 100%也是这么做的,每次点击按钮的时候把用户 id 字段和 callback_data 随便找个地方存起来,每次收到文字消息的时候检查是否有存起来的 callback_data ,有就进行对应操作,然后把存起来的 callback_data 删掉。为了防止用户很久以前点的按钮忘记了,通常还要存一个点击时间,超过一段时间就废弃。
y1y1
280 天前
难道是我理解能力有问题,看不懂你的描述
devliu1
280 天前
从 im 的角度,没必要帮你管理上下文。自己管理是正解,存个 redis 或者内存,带 ttl ,没那么麻烦
icoming
280 天前
确实要靠自己维护当前输入的状态。比如用户绑定 uuid ,点击"绑定"按钮后,服务端保存当前操作为"waiting_for_uuid",接下来的输入就是绑定 uuid 。

对应的 golang 代码如下:
```go
var (
// 在状态管理中跟踪用户的操作状态。 以 chatID 为键,存储用户状态
usersState = make(map[int64]string)
)

// 用户状态的值
const (
stateWaitUUID = "waiting_for_uuid"
)


// ...

for update := range updates {
if update.Message == nil {
continue
}

logger.Info.Printf("%s [%s] %s", tag, update.Message.From.UserName, update.Message.Text)

switch update.Message.Text {
case "/bind":
// 处理用户绑定逻辑
// 更新用户操作状态为“等待 UUID”
usersState[update.Message.Chat.ID] = stateWaitUUID
reply := "😘 请输入您的 UUID"
sendMessage(reply, update.Message.Chat.ID)
case "/queryflow":
// 处理查询流量逻辑
handleQuery(update.Message)
default:
// 如果用户状态为等待 UUID ,则获取输入文本作为 UUID
if state, ok := usersState[update.Message.Chat.ID]; ok && state == stateWaitUUID {
// 在这里处理绑定逻辑,将 uuid 存储到数据库或进行其他操作
handleBinding(update.Message)
// 清除用户状态
delete(usersState, update.Message.Chat.ID)
break
}

// 处理其他文本消息
msg := "😪 请通过菜单选择操作"
sendMessage(msg, update.Message.Chat.ID)
}
}

```
icoming
280 天前
@killerzhangsan "bot father 这里没有所谓的强制回复",是因为你执行了其它命令,服务端更新了新的状态。详细可以看我上面的代码
icoming
280 天前
另外,这玩意用 GPT4 会非常容易实现。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1016881

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX