154 lines
4.0 KiB
Go
154 lines
4.0 KiB
Go
package channels
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/mymmrac/telego"
|
|
"github.com/sipeed/picoclaw/pkg/config"
|
|
)
|
|
|
|
type TelegramCommander interface {
|
|
Help(ctx context.Context, message telego.Message) error
|
|
Start(ctx context.Context, message telego.Message) error
|
|
Show(ctx context.Context, message telego.Message) error
|
|
List(ctx context.Context, message telego.Message) error
|
|
}
|
|
|
|
type cmd struct {
|
|
bot *telego.Bot
|
|
config *config.Config
|
|
}
|
|
|
|
func NewTelegramCommands(bot *telego.Bot, cfg *config.Config) TelegramCommander {
|
|
return &cmd{
|
|
bot: bot,
|
|
config: cfg,
|
|
}
|
|
}
|
|
|
|
func commandArgs(text string) string {
|
|
parts := strings.SplitN(text, " ", 2)
|
|
if len(parts) < 2 {
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(parts[1])
|
|
}
|
|
func (c *cmd) Help(ctx context.Context, message telego.Message) error {
|
|
msg := `/start - Start the bot
|
|
/help - Show this help message
|
|
/show [model|channel] - Show current configuration
|
|
/list [models|channels] - List available options
|
|
`
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: msg,
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (c *cmd) Start(ctx context.Context, message telego.Message) error {
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: "Hello! I am PicoClaw 🦞",
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|
|
|
|
func (c *cmd) Show(ctx context.Context, message telego.Message) error {
|
|
args := commandArgs(message.Text)
|
|
if args == "" {
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: "Usage: /show [model|channel]",
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|
|
|
|
var response string
|
|
switch args {
|
|
case "model":
|
|
response = fmt.Sprintf("Current Model: %s (Provider: %s)",
|
|
c.config.Agents.Defaults.Model,
|
|
c.config.Agents.Defaults.Provider)
|
|
case "channel":
|
|
response = "Current Channel: telegram"
|
|
default:
|
|
response = fmt.Sprintf("Unknown parameter: %s. Try 'model' or 'channel'.", args)
|
|
}
|
|
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: response,
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|
|
func (c *cmd) List(ctx context.Context, message telego.Message) error {
|
|
args := commandArgs(message.Text)
|
|
if args == "" {
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: "Usage: /list [models|channels]",
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|
|
|
|
var response string
|
|
switch args {
|
|
case "models":
|
|
provider := c.config.Agents.Defaults.Provider
|
|
if provider == "" {
|
|
provider = "configured default"
|
|
}
|
|
response = fmt.Sprintf("Configured Model: %s\nProvider: %s\n\nTo change models, update config.yaml",
|
|
c.config.Agents.Defaults.Model, provider)
|
|
|
|
case "channels":
|
|
var enabled []string
|
|
if c.config.Channels.Telegram.Enabled {
|
|
enabled = append(enabled, "telegram")
|
|
}
|
|
if c.config.Channels.WhatsApp.Enabled {
|
|
enabled = append(enabled, "whatsapp")
|
|
}
|
|
if c.config.Channels.Feishu.Enabled {
|
|
enabled = append(enabled, "feishu")
|
|
}
|
|
if c.config.Channels.Discord.Enabled {
|
|
enabled = append(enabled, "discord")
|
|
}
|
|
if c.config.Channels.Slack.Enabled {
|
|
enabled = append(enabled, "slack")
|
|
}
|
|
response = fmt.Sprintf("Enabled Channels:\n- %s", strings.Join(enabled, "\n- "))
|
|
|
|
default:
|
|
response = fmt.Sprintf("Unknown parameter: %s. Try 'models' or 'channels'.", args)
|
|
}
|
|
|
|
_, err := c.bot.SendMessage(ctx, &telego.SendMessageParams{
|
|
ChatID: telego.ChatID{ID: message.Chat.ID},
|
|
Text: response,
|
|
ReplyParameters: &telego.ReplyParameters{
|
|
MessageID: message.MessageID,
|
|
},
|
|
})
|
|
return err
|
|
}
|