Files

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
}