Для создания разметки клавиатуры с помощью библиотеки `github.com/tucnak/telebot`, вам нужно использовать шаблоны, описанные в вашем файле `bot.config.yml`, чтобы настроить кнопки и их функциональность. Ошибка, которую вы получаете, связана с неправильным использованием синтаксиса шаблонов Go.
Вот основные шаги, как правильно создать кнопки, используя данные из вашего YAML-файла:
1. **Создайте файл `bot.config.yml` с правильным синтаксисом.** Например:
```yaml
buttons:
feed_pagination:
- [ 'Previous', '{{ range .Users }}feed_user{{ end }}', 'Next' ]
```
2. **Создайте структуру для ваших данных.** Например, `Users` — это массив пользователей, которые будут отображаться в кнопках. Вам нужно будет создать структуру данных, которая соответствует вашей конфигурации.
```go
type User struct {
ID int
Name string
}
type BotData struct {
Users []User
}
```
3. **Создайте экземпляр бота и загрузите конфигурацию.**
```go
package main
import (
"gopkg.in/tucnak/telebot.v2"
"gopkg.in/yaml.v2"
"io/ioutil"
)
func main() {
// Инициализация бота
bot, err := telebot.NewBot(telebot.Settings{
Token: "YOUR_BOT_TOKEN",
})
if err != nil {
panic(err)
}
// Загрузка конфигурации из YAML файла
configData, err := ioutil.ReadFile("bot.config.yml")
if err != nil {
panic(err)
}
var botConfig struct {
Buttons map[string]interface{}
}
err = yaml.Unmarshal(configData, &botConfig)
if err != nil {
panic(err)
}
// Пример пользователей
users := []User{
{1, "User1"},
{2, "User2"},
}
// Создание кнопок
markup := telebot.ReplyMarkup{}
buttons := botConfig.Buttons["feed_pagination"]
// Пример создания кнопок на основе пользователей
if users != nil {
for _, user := range users {
btn := markup.Data(user.Name, "feed_user"+string(user.ID)) // Добавляем уникальный идентификатор для кнопки
markup.Keyboard = append(markup.Keyboard, btn)
}
}
// Отправка сообщения с клавиатурой
bot.Send(m.Chat, "Choose a user:", &markup)
}
```
4. **Генерируйте кнопки динамически.** Используйте данные из вашей структуры, чтобы создать кнопки.
### Важные моменты:
- Убедитесь, что вы правильно определяете массивы и объекты в вашем YAML-файле.
- Можно использовать `{{ range ... }}` внутри YAML файла, но нужно, чтобы у вас была соответствующая структура для использования этих данных.
- Используйте уникальные идентификаторы для кнопок, чтобы иметь возможность обрабатывать нажатия кнопок.
Если у вас возникнут дополнительные вопросы или вам требуются уточнения по конкретным аспектам реализации, не стесняйтесь задавать!