// package serv_bots -- словарь ботов сервера package serv_bots import ( "fmt" "wartank/pkg/alias" "wartank/pkg/types" "wartank/server/serv_bots/dict_warbot" "wartank/server/serv_bots/warbot" ) // БотоФерма -- словарь ботов на сервере type БотоФерма struct { серв types.ИСервер хран types.ИХранилище словБот *dict_warbot.СловарьБотов } // НовБотоФерма -- возвращает новый словарь серверных ботов func НовБотоФерма(серв types.ИСервер) *БотоФерма { лог := серв.Слог() лог.Инфо("НовБотоФерма()\n") лог.Паника(серв == nil, "НовБотоФерма(): ИСервер == nil") сам := &БотоФерма{ серв: серв, хран: серв.Хранилище(), } сам.словБот = dict_warbot.НовСловарьБотов(серв) return сам } // Get -- возвращает боевого бота по имени func (сам *БотоФерма) Get(botNumber alias.БотНомер) types.ИБот { bot := сам.словБот.Get(botNumber) return bot } // BotStart -- запускает бота в работу по его имени func (сам *БотоФерма) BotStart(botNumber alias.БотНомер) error { bot := сам.словБот.Get(botNumber) if bot == nil { return fmt.Errorf("ServBots.BotStart(): bot(%v) not found", botNumber) } bot.Пуск() return nil } // ListBot -- возвращает список существующих ботов func (сам *БотоФерма) ListBot() []types.ИБот { lst := сам.словБот.ListBot() return lst } // НовБот -- добавляет нового бота на ферму func (сам *БотоФерма) НовБот(логин, пароль string, еслиАвто bool) error { { // Существует ли такой бот for _, бот := range сам.словБот.ListBot() { if бот.Имя() == логин { return nil } } } номер := alias.БотНомер(len(сам.словБот.ListBot()) + 1) фнНомерПровер := func() bool { for _, бот := range сам.словБот.ListBot() { if бот.Номер() == номер { return false } } return true } for !фнНомерПровер() { номер++ } { // Нет такого бота, надо его создать bot, err := warbot.НовВарБот(сам.серв, номер, логин, пароль, еслиАвто) if err != nil { return fmt.Errorf("БотоФерма.НовБот(): in create bot %q, err=\n\t%w", логин, err) } сам.словБот.Add(bot) } return nil }