mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-13 18:15:34 +00:00
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
package telegram
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"github.com/mymmrac/telego"
|
|
tu "github.com/mymmrac/telego/telegoutil"
|
|
|
|
"github.com/nextlevelbuilder/goclaw/internal/channels"
|
|
)
|
|
|
|
// ResolveMember implements channels.ChannelMemberResolver — fetches a
|
|
// group member profile via Bot API `getChatMember`. Used by the gateway
|
|
// to auto-enrich file_writer permission metadata when a caller grants
|
|
// access without providing displayName/username (e.g. Web UI path).
|
|
func (c *Channel) ResolveMember(ctx context.Context, chatID, userID string) (channels.MemberInfo, error) {
|
|
if c.bot == nil {
|
|
return channels.MemberInfo{}, fmt.Errorf("telegram bot not initialized")
|
|
}
|
|
chatIDInt, err := strconv.ParseInt(chatID, 10, 64)
|
|
if err != nil {
|
|
return channels.MemberInfo{}, fmt.Errorf("invalid chatID %q: %w", chatID, err)
|
|
}
|
|
userIDInt, err := strconv.ParseInt(userID, 10, 64)
|
|
if err != nil {
|
|
return channels.MemberInfo{}, fmt.Errorf("invalid userID %q: %w", userID, err)
|
|
}
|
|
member, err := c.bot.GetChatMember(ctx, &telego.GetChatMemberParams{
|
|
ChatID: tu.ID(chatIDInt),
|
|
UserID: userIDInt,
|
|
})
|
|
if err != nil {
|
|
return channels.MemberInfo{}, err
|
|
}
|
|
user := member.MemberUser()
|
|
return channels.MemberInfo{
|
|
Username: user.Username,
|
|
DisplayName: user.FirstName,
|
|
}, nil
|
|
}
|