Archived
1

Academic access level, can see other profiles

This commit is contained in:
Vladimir Hodakov 2017-12-01 10:55:18 +04:00
parent da8fe3f3e8
commit 703ea27cdb
7 changed files with 63 additions and 4 deletions

View File

@ -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)

View File

@ -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"

View File

@ -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
}

View File

@ -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Статус в боте: _игрок_"
}

View File

@ -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 {

View File

@ -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

View File

@ -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)