Academic access level, can see other profiles
This commit is contained in:
parent
da8fe3f3e8
commit
703ea27cdb
@ -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,12 +129,19 @@ 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)
|
||||
case update.Message.Command() == "squad_add_commander":
|
||||
|
@ -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