diff --git a/internal/tg_bot/commands/access_governance_bot/start.go b/internal/tg_bot/commands/access_governance_bot/start.go index 5df1cde..26a8102 100644 --- a/internal/tg_bot/commands/access_governance_bot/start.go +++ b/internal/tg_bot/commands/access_governance_bot/start.go @@ -5,7 +5,6 @@ import ( "access_governance_system/internal/db/models" "access_governance_system/internal/db/repositories" "access_governance_system/internal/tg_bot/commands" - tgbot "access_governance_system/internal/tg_bot/extension" "fmt" "strings" @@ -35,8 +34,6 @@ func (c *startCommand) CanHandle(command string) bool { } func (c *startCommand) Handle(text, arguments string, user *models.User, chatID int64) []tgbotapi.Chattable { - var messages = []tgbotapi.Chattable{} - parseMode := tgbotapi.ModeMarkdownV2 messageText := tgbotapi.EscapeText(parseMode, fmt.Sprintf(` @@ -51,86 +48,6 @@ func (c *startCommand) Handle(text, arguments string, user *models.User, chatID messageText = strings.Replace(messageText, "Menu", "*Menu*", -1) message := tgbotapi.NewMessage(chatID, messageText) message.ParseMode = parseMode - messages = append(messages, message) - - if user.Role == models.UserRoleSeeder && user.DiscordID == 0 { - message := c.createInstructionMessageForSeeder(chatID) - - if message == nil { - return []tgbotapi.Chattable{tgbot.DefaultErrorMessage(chatID)} - } - - messages = append(messages, message) - } - - return messages -} - -func (c *startCommand) createInstructionMessageForSeeder(chatID int64) tgbotapi.Chattable { - if c.bot == nil { - var err error - c.bot, err = tgbotapi.NewBotAPI(c.config.AccessGovernanceBot.Token) - if err != nil { - c.logger.Fatalf("could not create bot: %v", err) - return nil - } - } - - seedersChatInviteLink, err := c.createSeedersChatInviteLink() - if err != nil { - c.logger.Fatalf("could not create seeders chat invite link: %v", err) - return nil - } - - membersChatInviteLink, err := c.createMembersChatInviteLink() - if err != nil { - c.logger.Fatalf("could not create members chat invite link: %v", err) - return nil - } - - messageText := fmt.Sprintf(` -Я заметил, что ты являешься сидером, но ты еще не полностью авторизован в нашем сообществе. - -Для того, чтобы авторизоваться тебе надо: -1. Вступить в нашу группу для seeders - %s -2. Вступить в нашу группу для members - %s -3. Подключиться к нашему discord серверу - %s -4. Отправить команду %s в чате в discord -`, seedersChatInviteLink, membersChatInviteLink, c.config.DiscordInviteLink, "`!authorize`") - - message := tgbotapi.NewMessage(chatID, messageText) - message.DisableWebPagePreview = true - message.ParseMode = tgbotapi.ModeMarkdown - - return message -} - -func (c *startCommand) createMembersChatInviteLink() (string, error) { - inviteLinkConfig := tgbotapi.ChatInviteLinkConfig{ - ChatConfig: tgbotapi.ChatConfig{ - ChatID: c.config.App.MembersChatID, - }, - } - - inviteLink, err := c.bot.GetInviteLink(inviteLinkConfig) - if err != nil { - return "", err - } - - return inviteLink, nil -} - -func (c *startCommand) createSeedersChatInviteLink() (string, error) { - inviteLinkConfig := tgbotapi.ChatInviteLinkConfig{ - ChatConfig: tgbotapi.ChatConfig{ - ChatID: c.config.App.SeedersChatID, - }, - } - - inviteLink, err := c.bot.GetInviteLink(inviteLinkConfig) - if err != nil { - return "", err - } - return inviteLink, nil + return []tgbotapi.Chattable{message} } diff --git a/internal/tg_bot/handlers/access_governance_bot/command_handler.go b/internal/tg_bot/handlers/access_governance_bot/command_handler.go index 388ddce..724ac5a 100644 --- a/internal/tg_bot/handlers/access_governance_bot/command_handler.go +++ b/internal/tg_bot/handlers/access_governance_bot/command_handler.go @@ -78,11 +78,37 @@ func (h *accessGovernanceBotCommandHandler) Handle(bot *tgbotapi.BotAPI, update continue } - text := fmt.Sprintf(` -Привет, %s! Добро пожаловать в чат %s. + var text string + if user.Role == models.UserRoleSeeder { + seedersChatInviteLink, err := h.createSeedersChatInviteLink(bot) + if err != nil { + h.logger.Fatalf("could not create seeders chat invite link: %v", err) + continue + } + + membersChatInviteLink, err := h.createMembersChatInviteLink(bot) + if err != nil { + h.logger.Fatalf("could not create members chat invite link: %v", err) + continue + } + + text = fmt.Sprintf(` +Привет, %s! Добро пожаловать в сообщество %s. + +Для того, чтобы авторизоваться тебе надо: +1. Вступить в нашу группу для seeders - %s +2. Вступить в нашу группу для members - %s +3. Подключиться к нашему discord серверу - %s +4. Отправить команду %s в чате в discord +`, newChatMember.FirstName, h.config.App.CommunityName, seedersChatInviteLink, membersChatInviteLink, h.config.DiscordInviteLink, "`!authorize`") + } else { + text = fmt.Sprintf(` +Привет, %s! Добро пожаловать в сообщество %s. Для того, чтобы авторизоваться тебе надо подключиться к нашему discord серверу(%s) и отправить команду %s в чате в discord. - `, newChatMember.FirstName, h.config.App.CommunityName, h.config.DiscordInviteLink, "`!authorize`") +`, newChatMember.FirstName, h.config.App.CommunityName, h.config.DiscordInviteLink, "`!authorize`") + } + message := tgbotapi.NewMessage(newChatMember.ID, text) message.DisableWebPagePreview = true message.ParseMode = tgbotapi.ModeMarkdown @@ -234,3 +260,33 @@ func (h *accessGovernanceBotCommandHandler) tryToHandleQueryCallback(query strin h.logger.Errorw("received unknown command", "command", command) return []tgbotapi.Chattable{} } + +func (h *accessGovernanceBotCommandHandler) createMembersChatInviteLink(bot *tgbotapi.BotAPI) (string, error) { + inviteLinkConfig := tgbotapi.ChatInviteLinkConfig{ + ChatConfig: tgbotapi.ChatConfig{ + ChatID: h.config.App.MembersChatID, + }, + } + + inviteLink, err := bot.GetInviteLink(inviteLinkConfig) + if err != nil { + return "", err + } + + return inviteLink, nil +} + +func (h *accessGovernanceBotCommandHandler) createSeedersChatInviteLink(bot *tgbotapi.BotAPI) (string, error) { + inviteLinkConfig := tgbotapi.ChatInviteLinkConfig{ + ChatConfig: tgbotapi.ChatConfig{ + ChatID: h.config.App.SeedersChatID, + }, + } + + inviteLink, err := bot.GetInviteLink(inviteLinkConfig) + if err != nil { + return "", err + } + + return inviteLink, nil +}