tg/mods/broker: Add chat action support
This commit is contained in:
parent
62106504ee
commit
124345c02a
8 changed files with 55 additions and 0 deletions
|
@ -20,5 +20,8 @@ func executeClientCommand(action tg.ClientCommand, client net.Conn) {
|
||||||
case tg.CmdForwardMessage:
|
case tg.CmdForwardMessage:
|
||||||
data := *(action.ForwardMessageData)
|
data := *(action.ForwardMessageData)
|
||||||
api.ForwardMessage(data)
|
api.ForwardMessage(data)
|
||||||
|
case tg.CmdSendChatAction:
|
||||||
|
data := *(action.ChatActionData)
|
||||||
|
api.SendChatAction(data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -125,6 +125,16 @@ func (t Telegram) ForwardMessage(data tg.ClientForwardMessageData) {
|
||||||
checkerr("ForwardMessage/http.PostForm", err)
|
checkerr("ForwardMessage/http.PostForm", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t Telegram) SendChatAction(data tg.ClientChatActionData) {
|
||||||
|
postdata := url.Values{
|
||||||
|
"chat_id": {strconv.FormatInt(data.ChatID, 10)},
|
||||||
|
"action": {string(data.Action)},
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := http.PostForm(t.apiURL("sendChatAction"), postdata)
|
||||||
|
checkerr("SendChatAction/http.PostForm", err)
|
||||||
|
}
|
||||||
|
|
||||||
// GetFile sends a "getFile" API call to Telegram's servers and fetches the file
|
// GetFile sends a "getFile" API call to Telegram's servers and fetches the file
|
||||||
// specified afterward. The file will be then send back to the client that requested it
|
// specified afterward. The file will be then send back to the client that requested it
|
||||||
// with the specified callback id.
|
// with the specified callback id.
|
||||||
|
|
|
@ -86,6 +86,8 @@ func memegen(broker *tg.Broker, update tg.APIMessage) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broker.SendChatAction(update.Chat, tg.ActionUploadingPhoto)
|
||||||
|
|
||||||
//TODO Clean up this mess
|
//TODO Clean up this mess
|
||||||
|
|
||||||
// Create target image
|
// Create target image
|
||||||
|
|
|
@ -86,6 +86,8 @@ func snapchat(broker *tg.Broker, update tg.APIMessage) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broker.SendChatAction(update.Chat, tg.ActionUploadingPhoto)
|
||||||
|
|
||||||
// Create target image
|
// Create target image
|
||||||
bounds := img.Bounds()
|
bounds := img.Bounds()
|
||||||
iwidth := float64(bounds.Size().Y) / 1.6
|
iwidth := float64(bounds.Size().Y) / 1.6
|
||||||
|
|
|
@ -57,6 +57,7 @@ func stt(broker *tg.Broker, update tg.APIMessage) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broker.SendChatAction(update.Chat, tg.ActionTyping)
|
||||||
resp, err := sttClient.Recognize(sttCtx, &speechpb.RecognizeRequest{
|
resp, err := sttClient.Recognize(sttCtx, &speechpb.RecognizeRequest{
|
||||||
Config: &speechpb.RecognitionConfig{
|
Config: &speechpb.RecognitionConfig{
|
||||||
Encoding: speechpb.RecognitionConfig_OGG_OPUS,
|
Encoding: speechpb.RecognitionConfig_OGG_OPUS,
|
||||||
|
|
|
@ -98,6 +98,8 @@ func unsplash(broker *tg.Broker, update tg.APIMessage) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
broker.SendChatAction(update.Chat, tg.ActionUploadingPhoto)
|
||||||
|
|
||||||
// Darken image
|
// Darken image
|
||||||
img = imaging.AdjustBrightness(imaging.AdjustGamma(imaging.AdjustSigmoid(img, 0.5, -6.0), 0.8), -20)
|
img = imaging.AdjustBrightness(imaging.AdjustGamma(imaging.AdjustSigmoid(img, 0.5, -6.0), 0.8), -20)
|
||||||
|
|
||||||
|
|
11
tg/broker.go
11
tg/broker.go
|
@ -75,6 +75,17 @@ func (b *Broker) ForwardMessage(chat *APIChat, message APIMessage) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SendChatAction sets a chat action for 5 seconds or less (canceled at first message sent)
|
||||||
|
func (b *Broker) SendChatAction(chat *APIChat, action ChatAction) {
|
||||||
|
b.sendCmd(ClientCommand{
|
||||||
|
Type: CmdSendChatAction,
|
||||||
|
ChatActionData: &ClientChatActionData{
|
||||||
|
ChatID: chat.ChatID,
|
||||||
|
Action: action,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// GetFile sends a file retrieval request to the Broker.
|
// GetFile sends a file retrieval request to the Broker.
|
||||||
// This function is asynchronous as data will be delivered to the given callback.
|
// This function is asynchronous as data will be delivered to the given callback.
|
||||||
func (b *Broker) GetFile(fileID string, fn BrokerCallback) int {
|
func (b *Broker) GetFile(fileID string, fn BrokerCallback) int {
|
||||||
|
|
|
@ -38,6 +38,9 @@ const (
|
||||||
|
|
||||||
// CmdGetFile requests the broker to get a file from Telegram
|
// CmdGetFile requests the broker to get a file from Telegram
|
||||||
CmdGetFile ClientCommandType = "getFile"
|
CmdGetFile ClientCommandType = "getFile"
|
||||||
|
|
||||||
|
// CmdSendChatAction requests the broker to set a chat action (typing, etc.)
|
||||||
|
CmdSendChatAction ClientCommandType = "sendChatAction"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ClientTextMessageData is the required data for a CmdSendTextMessage request
|
// ClientTextMessageData is the required data for a CmdSendTextMessage request
|
||||||
|
@ -63,6 +66,26 @@ type ClientForwardMessageData struct {
|
||||||
MessageID int64
|
MessageID int64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ClientChatActionData is the required data for a CmdSendChatAction request
|
||||||
|
type ClientChatActionData struct {
|
||||||
|
ChatID int64
|
||||||
|
Action ChatAction
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChatAction is the action name for CmdSendChatAction requests
|
||||||
|
type ChatAction string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ActionTyping ChatAction = "typing"
|
||||||
|
ActionUploadingPhoto ChatAction = "upload_photo"
|
||||||
|
ActionRecordingVideo ChatAction = "record_video"
|
||||||
|
ActionUploadingVideo ChatAction = "upload_video"
|
||||||
|
ActionRecordingAudio ChatAction = "record_audio"
|
||||||
|
ActionUploadingAudio ChatAction = "upload_audio"
|
||||||
|
ActionUploadingDocument ChatAction = "upload_document"
|
||||||
|
ActionFindingLocation ChatAction = "find_location"
|
||||||
|
)
|
||||||
|
|
||||||
// FileRequestData is the required data for a CmdGetFile request
|
// FileRequestData is the required data for a CmdGetFile request
|
||||||
type FileRequestData struct {
|
type FileRequestData struct {
|
||||||
FileID string
|
FileID string
|
||||||
|
@ -74,6 +97,7 @@ type ClientCommand struct {
|
||||||
TextMessageData *ClientTextMessageData `json:",omitempty"`
|
TextMessageData *ClientTextMessageData `json:",omitempty"`
|
||||||
PhotoData *ClientPhotoData `json:",omitempty"`
|
PhotoData *ClientPhotoData `json:",omitempty"`
|
||||||
ForwardMessageData *ClientForwardMessageData `json:",omitempty"`
|
ForwardMessageData *ClientForwardMessageData `json:",omitempty"`
|
||||||
|
ChatActionData *ClientChatActionData `json:",omitempty"`
|
||||||
FileRequestData *FileRequestData `json:",omitempty"`
|
FileRequestData *FileRequestData `json:",omitempty"`
|
||||||
Callback *int `json:",omitempty"`
|
Callback *int `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue