Academic access level, can see other profiles
This commit is contained in:
		| @@ -16,6 +16,7 @@ func (r *Router) routePrivateRequest(update *tgbotapi.Update, playerRaw *dbmappi | ||||
| 	var pokedexMsg = regexp.MustCompile("/pokede(x|ks)\\d?\\z") | ||||
| 	var pokememeInfoMsg = regexp.MustCompile("/pk(\\d+)") | ||||
| 	var usersMsg = regexp.MustCompile("/users(\\d+|)\\z") | ||||
| 	var profileMsg = regexp.MustCompile("/profile(\\d+)\\z") | ||||
| 	var squadInfoMsg = regexp.MustCompile("/show_squad(\\d+)\\z") | ||||
| 	var orderSendMsg = regexp.MustCompile("/send_order(\\d+)\\z") | ||||
|  | ||||
| @@ -128,11 +129,18 @@ func (r *Router) routePrivateRequest(update *tgbotapi.Update, playerRaw *dbmappi | ||||
| 				return c.Talkers.AnyMessageUnauthorized(update) | ||||
|  | ||||
| 			case usersMsg.MatchString(text): | ||||
| 				if c.Users.PlayerBetterThan(playerRaw, "admin") { | ||||
| 				if c.Users.PlayerBetterThan(playerRaw, "academic") { | ||||
| 					return c.Users.UsersList(update) | ||||
| 				} | ||||
|  | ||||
| 				return c.Talkers.AnyMessageUnauthorized(update) | ||||
| 			 | ||||
| 			case profileMsg.MatchString(text): | ||||
| 				if c.Users.PlayerBetterThan(playerRaw, "academic") { | ||||
| 					return c.Users.ForeignProfileMessage(update) | ||||
| 				} | ||||
|  | ||||
| 				return c.Talkers.AnyMessageUnauthorized(update) | ||||
|  | ||||
| 			case update.Message.Command() == "squad_add_user": | ||||
| 				return c.Squader.AddUserToSquad(update, playerRaw) | ||||
|   | ||||
| @@ -25,6 +25,8 @@ func (t *Talkers) HelpMessage(update *tgbotapi.Update, playerRaw *dbmapping.Play | ||||
| 		message += "+ /pin _номера чатов_ _текст_ — отправить сообщение в чаты с номерами. Сообщение будет автоматичекси запинено. Пример: \"/pin 2,3,5 привет мир\". Внимание: между номерами чатов ставятся запятые без пробелов! Всё, что идёт после второго пробела в команде — сообщение\n" | ||||
| 		message += "+ /pin\\_all _текст_ — отправить сообщение во все группы, где находится бот. Сообщение будет автоматически запинено.\n" | ||||
| 		message += "+ /orders — просмотреть приказы на атаку\n" | ||||
| 	} | ||||
| 	if c.Users.PlayerBetterThan(playerRaw, "academic") { | ||||
| 		message += "+ /users —  просмотреть зарегистрированных пользователей бота\n" | ||||
| 	} | ||||
| 	message += "+ /help – выводит данное сообщение\n" | ||||
|   | ||||
| @@ -72,6 +72,10 @@ func (u *Users) PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) | ||||
| 		if powerLevel != "owner" { | ||||
| 			isBetter = true | ||||
| 		} | ||||
| 	case "academic": | ||||
| 		if powerLevel != "ownder" && powerLevel != "admin" { | ||||
| 			isBetter = true | ||||
| 		} | ||||
| 	default: | ||||
| 		isBetter = false | ||||
| 	} | ||||
|   | ||||
| @@ -15,6 +15,28 @@ func (u *Users) FormatUsername(userName string) string { | ||||
| 	return strings.Replace(userName, "_", "\\_", -1) | ||||
| } | ||||
|  | ||||
| // ForeignProfileMessage shows profile of another user | ||||
| func (u *Users) ForeignProfileMessage(update *tgbotapi.Update) string { | ||||
| 	userNum := strings.TrimPrefix(update.Message.Command(), "profile") | ||||
| 	userID, err := strconv.Atoi(userNum) | ||||
| 	if err != nil { | ||||
| 		c.Log.Error(err.Error()) | ||||
| 		return "fail" | ||||
| 	} | ||||
|  | ||||
| 	playerRaw, ok := u.GetPlayerByID(userID) | ||||
| 	if !ok { | ||||
| 		return "fail" | ||||
| 	} | ||||
|  | ||||
| 	_, ok = u.GetProfile(playerRaw.ID) | ||||
| 	if !ok { | ||||
| 		return c.Talkers.BotError(update) | ||||
| 	} | ||||
|  | ||||
| 	return u.ProfileMessage(update, &playerRaw) | ||||
| } | ||||
|  | ||||
| // ProfileMessage shows current player's profile | ||||
| func (u *Users) ProfileMessage(update *tgbotapi.Update, playerRaw *dbmapping.Player) string { | ||||
| 	profileRaw, ok := u.GetProfile(playerRaw.ID) | ||||
| @@ -94,6 +116,8 @@ func (u *Users) ProfileMessage(update *tgbotapi.Update, playerRaw *dbmapping.Pla | ||||
| 		message += "\n\nСтатус в боте: _владелец_" | ||||
| 	} else if playerRaw.Status == "admin" { | ||||
| 		message += "\n\nСтатус в боте: _администратор_" | ||||
| 	} else if playerRaw.Status == "academic" { | ||||
| 		message += "\n\nСтатус в боте: _академик_" | ||||
| 	} else { | ||||
| 		message += "\n\nСтатус в боте: _игрок_" | ||||
| 	} | ||||
|   | ||||
| @@ -98,7 +98,7 @@ func (u *Users) usersList(update *tgbotapi.Update, page int, usersArray []dbmapp | ||||
| 				if usersArray[i].Profile.TelegramNickname != "" { | ||||
| 					message += " (@" + u.FormatUsername(usersArray[i].Profile.TelegramNickname) + ")" | ||||
| 				} | ||||
| 				message += "\n" | ||||
| 				message += " /profile" + strconv.Itoa(usersArray[i].Player.ID) + "\n" | ||||
| 				message += "Telegram ID: " + strconv.Itoa(usersArray[i].Player.TelegramID) + "\n" | ||||
| 				message += "Последнее обновление: " + usersArray[i].Profile.CreatedAt.Format("02.01.2006 15:04:05") + "\n" | ||||
| 			} else { | ||||
|   | ||||
| @@ -19,6 +19,7 @@ type UsersInterface interface { | ||||
| 	GetPlayerByID(playerID int) (dbmapping.Player, bool) | ||||
| 	PlayerBetterThan(playerRaw *dbmapping.Player, powerLevel string) bool | ||||
|  | ||||
| 	ForeignProfileMessage(update *tgbotapi.Update) string | ||||
| 	FormatUsername(userName string) string | ||||
| 	ProfileMessage(update *tgbotapi.Update, playerRaw *dbmapping.Player) string | ||||
| 	UsersList(update *tgbotapi.Update) string | ||||
|   | ||||
| @@ -15,8 +15,18 @@ func (w *Welcomer) alertUserWithoutProfile(update *tgbotapi.Update, newUser *tgb | ||||
| 		return "fail" | ||||
| 	} | ||||
|  | ||||
| 	userName := "" | ||||
| 	if newUser.UserName != "" { | ||||
| 		userName += "@" + newUser.UserName | ||||
| 	} else { | ||||
| 		userName += newUser.FirstName | ||||
| 		if newUser.LastName != "" { | ||||
| 			userName += " " + newUser.LastName | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	message := "*Новый вход пользователя без профиля в чат с ботом!*\n" | ||||
| 	message += "В чат _" + chat.Name + "_ вошёл некто @" + newUser.UserName | ||||
| 	message += "В чат _" + chat.Name + "_ вошёл некто " + c.Users.FormatUsername(userName) | ||||
| 	message += ". Он получил уведомление о том, что ему нужно создать профиль в боте." | ||||
|  | ||||
| 	msg := tgbotapi.NewMessage(alertGroupID, message) | ||||
| @@ -34,8 +44,18 @@ func (w *Welcomer) alertSpyUser(update *tgbotapi.Update, newUser *tgbotapi.User) | ||||
| 		return "fail" | ||||
| 	} | ||||
|  | ||||
| 	userName := "" | ||||
| 	if newUser.UserName != "" { | ||||
| 		userName += "@" + newUser.UserName | ||||
| 	} else { | ||||
| 		userName += newUser.FirstName | ||||
| 		if newUser.LastName != "" { | ||||
| 			userName += " " + newUser.LastName | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	message := "*Шпион в деле!*\n" | ||||
| 	message += "В чат _" + chat.Name + "_ вошёл некто @" + newUser.UserName | ||||
| 	message += "В чат _" + chat.Name + "_ вошёл некто " + c.Users.FormatUsername(userName) | ||||
| 	message += ". У него профиль другой лиги. Ждём обновлений." | ||||
|  | ||||
| 	msg := tgbotapi.NewMessage(alertGroupID, message) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user