split tg-groups
This commit is contained in:
@@ -13,14 +13,15 @@ type AdminMessageController struct {
|
||||
Bot *tele.Bot
|
||||
}
|
||||
|
||||
func NewAdminMessageController(b *tele.Bot, db *DataController) *BonusController {
|
||||
return &BonusController{DC: db, Bot: b}
|
||||
func NewAdminMessageController(b *tele.Bot, db *DataController) *AdminMessageController {
|
||||
return &AdminMessageController{DC: db, Bot: b}
|
||||
}
|
||||
|
||||
func (b *BonusController) AdminMessage(c tele.Context) error {
|
||||
func (b *AdminMessageController) AdminMessage(c tele.Context) error {
|
||||
var text string
|
||||
chatId := c.Chat().ID
|
||||
|
||||
user := b.DC.GetUser(c.Sender().ID)
|
||||
user := b.DC.GetUser(c.Sender().ID, chatId)
|
||||
if !user.Admin {
|
||||
return c.Send("У вас нет прав для использования этой команды")
|
||||
}
|
||||
@@ -33,7 +34,7 @@ func (b *BonusController) AdminMessage(c tele.Context) error {
|
||||
}
|
||||
|
||||
_, err := b.Bot.Send(
|
||||
&tele.Chat{ID: -1002345923642},
|
||||
c.Chat(),
|
||||
text,
|
||||
)
|
||||
|
||||
|
||||
@@ -21,8 +21,9 @@ func NewBonusController(b *tele.Bot, db *DataController) *BonusController {
|
||||
func (b *BonusController) Bonus(c tele.Context) error {
|
||||
var text string
|
||||
var msg *tele.Message
|
||||
chatId := c.Chat().ID
|
||||
|
||||
user := b.DC.GetUser(c.Sender().ID)
|
||||
user := b.DC.GetUser(c.Sender().ID, chatId)
|
||||
if !user.Admin {
|
||||
return c.Send("У вас нет прав для использования этой команды")
|
||||
}
|
||||
@@ -31,7 +32,7 @@ func (b *BonusController) Bonus(c tele.Context) error {
|
||||
text = strings.Split(c.Text(), " ")[1]
|
||||
fmt.Println("New bonus", text)
|
||||
} else {
|
||||
return c.Send("Некоректная команда, используйте /bonus1 <сумма>")
|
||||
return c.Send("Некоректная команда, используйте /b <сумма>")
|
||||
}
|
||||
|
||||
giftSumm, err := strconv.Atoi(text)
|
||||
@@ -40,11 +41,11 @@ func (b *BonusController) Bonus(c tele.Context) error {
|
||||
}
|
||||
|
||||
btn := &tele.ReplyMarkup{}
|
||||
row := btn.Row(btn.Data("Забрать", "add_bonus", fmt.Sprintf("%d", giftSumm)+":"+fmt.Sprintf("%d", c.Sender().ID)))
|
||||
row := btn.Row(btn.Data("Забрать", "add_bonus", fmt.Sprintf("%d", giftSumm)+":"+fmt.Sprintf("%d", c.Sender().ID)+":"+fmt.Sprintf("%d", chatId)))
|
||||
btn.Inline(row)
|
||||
|
||||
msg, err = b.Bot.Send(
|
||||
&tele.Chat{ID: -1002345923642},
|
||||
c.Chat(),
|
||||
fmt.Sprintf("Успей забрать бонус.\nСумма: %d", giftSumm),
|
||||
btn,
|
||||
)
|
||||
@@ -54,10 +55,14 @@ func (b *BonusController) Bonus(c tele.Context) error {
|
||||
}
|
||||
|
||||
b.Bot.Handle(&row[0], func(c tele.Context) error {
|
||||
user := b.DC.GetUser(c.Sender().ID)
|
||||
data := strings.Split(c.Data(), ":")
|
||||
giftSumm, _ := strconv.Atoi(data[0])
|
||||
chatId, _ := strconv.ParseInt(data[2], 10, 64)
|
||||
|
||||
user := b.DC.GetUser(c.Sender().ID, chatId)
|
||||
newSize := user.DickSize + giftSumm
|
||||
|
||||
b.DC.UpdateDick(c.Sender().ID, newSize)
|
||||
b.DC.UpdateDick(c.Sender().ID, chatId, newSize)
|
||||
_, err := b.Bot.Edit(msg, fmt.Sprintf("%s получает бонус: %d", c.Sender().FirstName, giftSumm))
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
|
||||
@@ -44,8 +44,8 @@ func (d *DataController) ClearAllBlocked() {
|
||||
}
|
||||
|
||||
// CreateUser creates new user with random dick size and sets it to blocked
|
||||
func (d *DataController) CreateUser(id int64, lname string, fname string) {
|
||||
_, err := d.DB.Exec("INSERT INTO users (id, fname, lname, dick_size, admin, blocked, trick) VALUES (?,?,?,?,?,?,?)", id, fname, lname, 0, 0, 0, 1)
|
||||
func (d *DataController) CreateUser(id int64, chatId int64, lname string, fname string) {
|
||||
_, err := d.DB.Exec("INSERT INTO users (id, chat_id, fname, lname, dick_size, admin, blocked, trick) VALUES (?,?,?,?,?,?,?,?)", id, chatId, fname, lname, 0, 0, 0, 1)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} else {
|
||||
@@ -54,15 +54,15 @@ func (d *DataController) CreateUser(id int64, lname string, fname string) {
|
||||
}
|
||||
|
||||
// GetUser gets user's data by id
|
||||
func (d *DataController) GetUser(id int64) *models.User {
|
||||
func (d *DataController) GetUser(id int64, chatId int64) *models.User {
|
||||
var user models.User
|
||||
row, err := d.DB.Query("SELECT * FROM users WHERE id =?", id)
|
||||
row, err := d.DB.Query("SELECT * FROM users WHERE id = ? AND chat_id = ?", id, chatId)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for row.Next() {
|
||||
err := row.Scan(&user.ID, &user.FirstName, &user.LastName, &user.DickSize, &user.Blocked, &user.Admin, &user.Trick)
|
||||
err := row.Scan(&user.ID, &user.ChatID, &user.FirstName, &user.LastName, &user.DickSize, &user.Blocked, &user.Admin, &user.Trick)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
@@ -72,8 +72,8 @@ func (d *DataController) GetUser(id int64) *models.User {
|
||||
}
|
||||
|
||||
// UpdateUser updates user's dick size and blocked status
|
||||
func (d *DataController) UpdateDick(id int64, newDickSize int) {
|
||||
_, err := d.DB.Exec("UPDATE users SET dick_size =?, blocked =? WHERE id =?", newDickSize, 1, id)
|
||||
func (d *DataController) UpdateDick(id int64, chatId int64, newDickSize int) {
|
||||
_, err := d.DB.Exec("UPDATE users SET dick_size =?, blocked =? WHERE id =? AND chat_id = ?", newDickSize, 1, id, chatId)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} else {
|
||||
@@ -82,8 +82,8 @@ func (d *DataController) UpdateDick(id int64, newDickSize int) {
|
||||
}
|
||||
|
||||
// AddTricks updates user's
|
||||
func (d *DataController) AddTricks(id int64) {
|
||||
_, err := d.DB.Exec("UPDATE users SET trick = trick + 1 WHERE id =?", id)
|
||||
func (d *DataController) AddTricks(id int64, chatId int64) {
|
||||
_, err := d.DB.Exec("UPDATE users SET trick = trick + 1 WHERE id =? AND chat_id = ?", id, chatId)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} else {
|
||||
@@ -92,16 +92,16 @@ func (d *DataController) AddTricks(id int64) {
|
||||
}
|
||||
|
||||
// GetTopUsers gets top 10 users by dick size
|
||||
func (d *DataController) GetTopUsers() []models.User {
|
||||
func (d *DataController) GetTopUsers(chatId int64) []models.User {
|
||||
var users []models.User
|
||||
rows, err := d.DB.Query("SELECT * FROM users ORDER BY dick_size DESC LIMIT 10")
|
||||
rows, err := d.DB.Query("SELECT * FROM users WHERE chat_id = ? ORDER BY dick_size DESC LIMIT 10", chatId)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
var user models.User
|
||||
err := rows.Scan(&user.ID, &user.FirstName, &user.LastName, &user.DickSize, &user.Blocked, &user.Admin, &user.Trick)
|
||||
err := rows.Scan(&user.ID, &user.ChatID, &user.FirstName, &user.LastName, &user.DickSize, &user.Blocked, &user.Admin, &user.Trick)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -18,14 +18,15 @@ func (d *DickController) Dick(c tele.Context) error {
|
||||
var retMessage string
|
||||
|
||||
id := c.Sender().ID
|
||||
chatId := c.Chat().ID
|
||||
lName := c.Sender().LastName
|
||||
fName := c.Sender().FirstName
|
||||
|
||||
user := d.DC.GetUser(id)
|
||||
user := d.DC.GetUser(id, chatId)
|
||||
|
||||
if user.ID == 0 {
|
||||
d.DC.CreateUser(id, lName, fName)
|
||||
user = d.DC.GetUser(id)
|
||||
d.DC.CreateUser(id, chatId, lName, fName)
|
||||
user = d.DC.GetUser(id, chatId)
|
||||
}
|
||||
|
||||
newRange := RandRange()
|
||||
@@ -34,8 +35,8 @@ func (d *DickController) Dick(c tele.Context) error {
|
||||
if user.Blocked {
|
||||
retMessage = fmt.Sprintf("%s %s, ты уже отращивал свой писюн, следющая попытка будет после 22:00 по МСК. Сейчас он равен %d см.", fName, lName, user.DickSize)
|
||||
} else {
|
||||
d.DC.UpdateDick(id, newSize)
|
||||
d.DC.AddTricks(id)
|
||||
d.DC.UpdateDick(id, chatId, newSize)
|
||||
d.DC.AddTricks(id, chatId)
|
||||
|
||||
if newRange == 0 {
|
||||
retMessage = fmt.Sprintf("%s %s, твой писюн сегодня не подрос. Не переживай, просто он, видимо, решил взять выходной — пусть лучше отдохнет перед завтрашними подвигами!", fName, lName)
|
||||
@@ -51,7 +52,8 @@ func (d *DickController) Dick(c tele.Context) error {
|
||||
|
||||
func (d *DickController) TopDick(c tele.Context) error {
|
||||
var retMessage string
|
||||
users := d.DC.GetTopUsers()
|
||||
chatId := c.Chat().ID
|
||||
users := d.DC.GetTopUsers(chatId)
|
||||
|
||||
for iter, user := range users {
|
||||
retMessage += fmt.Sprintf("%d. %s %s, %d см\n", iter+1, user.FirstName, user.LastName, user.DickSize)
|
||||
|
||||
@@ -8,46 +8,59 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"gopkg.in/telebot.v4"
|
||||
tele "gopkg.in/telebot.v4"
|
||||
)
|
||||
|
||||
// AcceptDuelButtonUnique is the unique identifier for the duel accept button.
|
||||
const AcceptDuelButtonUnique = "accept_duel"
|
||||
|
||||
type DuelController struct {
|
||||
type DuelState struct {
|
||||
PlayerOne struct {
|
||||
ID int64
|
||||
Counter int
|
||||
FName string
|
||||
}
|
||||
|
||||
PlayerTwo struct {
|
||||
ID int64
|
||||
Counter int
|
||||
FName string
|
||||
}
|
||||
|
||||
Summ int
|
||||
Inited bool
|
||||
MatchAccepted bool
|
||||
InitialMessage *tele.Message
|
||||
Bot *tele.Bot
|
||||
DC *DataController
|
||||
}
|
||||
|
||||
type DuelController struct {
|
||||
Bot *tele.Bot
|
||||
DC *DataController
|
||||
duels map[int64]*DuelState
|
||||
}
|
||||
|
||||
// Controller Init
|
||||
func NewDuel(bot *tele.Bot, dc *DataController) *DuelController {
|
||||
func NewDuel(bot *telebot.Bot, dc *DataController) *DuelController {
|
||||
return &DuelController{
|
||||
Inited: false,
|
||||
Bot: bot,
|
||||
DC: dc,
|
||||
Bot: bot,
|
||||
DC: dc,
|
||||
duels: make(map[int64]*DuelState),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *DuelController) getDuelState(chatId int64) *DuelState {
|
||||
if _, ok := s.duels[chatId]; !ok {
|
||||
s.duels[chatId] = &DuelState{}
|
||||
}
|
||||
return s.duels[chatId]
|
||||
}
|
||||
|
||||
// Start Match
|
||||
func (s *DuelController) StartMatch(c tele.Context) error {
|
||||
if s.Inited {
|
||||
return c.Send(fmt.Sprintf("Дуэль уже началась!\nИгрок: %s\nСтавка: %d", s.PlayerOne.FName, s.Summ))
|
||||
chatId := c.Chat().ID
|
||||
duel := s.getDuelState(chatId)
|
||||
|
||||
if duel.Inited {
|
||||
return c.Send(fmt.Sprintf("Дуэль уже началась!\nИгрок: %s\nСтавка: %d", duel.PlayerOne.FName, duel.Summ))
|
||||
}
|
||||
|
||||
var text string
|
||||
@@ -66,88 +79,89 @@ func (s *DuelController) StartMatch(c tele.Context) error {
|
||||
if summ <= 0 {
|
||||
return c.Send("Некорректная сумма, используйте положительное значение!")
|
||||
} else {
|
||||
s.Summ = summ
|
||||
duel.Summ = summ
|
||||
}
|
||||
}
|
||||
|
||||
s.Inited = true
|
||||
s.PlayerOne.ID = c.Sender().ID
|
||||
s.PlayerOne.FName = c.Sender().FirstName
|
||||
duel.Inited = true
|
||||
duel.PlayerOne.ID = c.Sender().ID
|
||||
duel.PlayerOne.FName = c.Sender().FirstName
|
||||
|
||||
user := s.DC.GetUser(s.PlayerOne.ID) // Assuming GetUser now returns (*User, error)
|
||||
// CRITICAL: Check if the user was found to prevent a panic.
|
||||
user := s.DC.GetUser(duel.PlayerOne.ID, chatId)
|
||||
if user == nil {
|
||||
s.Inited = false // Reset state since the duel can't start
|
||||
duel.Inited = false
|
||||
return c.Send("Не удалось найти вас в базе данных. Попробуйте /start.")
|
||||
}
|
||||
|
||||
if user.DickSize < summ {
|
||||
s.Inited = false
|
||||
duel.Inited = false
|
||||
return c.Send("У вас недостаточно длинный пенис для состязания!")
|
||||
}
|
||||
|
||||
// Create an inline keyboard with an "Accept" button
|
||||
markup := &tele.ReplyMarkup{}
|
||||
btnAccept := markup.Data("Принять", AcceptDuelButtonUnique)
|
||||
markup.Inline(markup.Row(btnAccept))
|
||||
|
||||
msg, err := s.Bot.Send(c.Chat(), fmt.Sprintf("%s начал дуель, ставка: %d", s.PlayerOne.FName, summ), markup)
|
||||
msg, err := s.Bot.Send(c.Chat(), fmt.Sprintf("%s начал дуель, ставка: %d", duel.PlayerOne.FName, summ), markup)
|
||||
if err != nil {
|
||||
s.resetDuelState()
|
||||
s.resetDuelState(chatId)
|
||||
return err
|
||||
}
|
||||
s.InitialMessage = msg
|
||||
duel.InitialMessage = msg
|
||||
return nil
|
||||
}
|
||||
|
||||
// Accept Match
|
||||
func (s *DuelController) AcceptMatch(c tele.Context) error {
|
||||
if s.MatchAccepted {
|
||||
chatId := c.Chat().ID
|
||||
duel := s.getDuelState(chatId)
|
||||
|
||||
if duel.MatchAccepted {
|
||||
return c.Send("Дождитесь окончания дуэли.")
|
||||
}
|
||||
|
||||
if !s.Inited {
|
||||
if !duel.Inited {
|
||||
return c.Send("Дуэль еще не началась! Дождитесь старта матча или начните новую дуель с помощью /duel <сумма>")
|
||||
}
|
||||
|
||||
s.PlayerTwo.ID = c.Sender().ID
|
||||
s.PlayerTwo.FName = c.Sender().FirstName
|
||||
duel.PlayerTwo.ID = c.Sender().ID
|
||||
duel.PlayerTwo.FName = c.Sender().FirstName
|
||||
|
||||
user := s.DC.GetUser(s.PlayerTwo.ID) // Assuming GetUser now returns (*User, error)
|
||||
// CRITICAL: Check if the user was found to prevent a panic.
|
||||
user := s.DC.GetUser(duel.PlayerTwo.ID, chatId)
|
||||
if user == nil {
|
||||
// No need to reset state here, the duel is still waiting for a valid player.
|
||||
return c.Send("Не удалось найти вас в базе данных. Попробуйте /start.")
|
||||
}
|
||||
|
||||
if user.DickSize < s.Summ {
|
||||
if user.DickSize < duel.Summ {
|
||||
return c.Send("У вас недостаточно длинный пенис для состязания!")
|
||||
}
|
||||
|
||||
if s.PlayerTwo.ID == s.PlayerOne.ID {
|
||||
if duel.PlayerTwo.ID == duel.PlayerOne.ID {
|
||||
return c.Send("Вы не можете принять участие в своей же дуэли!")
|
||||
}
|
||||
|
||||
s.MatchAccepted = true
|
||||
s.Summ *= 2
|
||||
duel.MatchAccepted = true
|
||||
duel.Summ *= 2
|
||||
|
||||
if s.InitialMessage == nil {
|
||||
if duel.InitialMessage == nil {
|
||||
log.Println("Error: InitialMessage is nil in AcceptMatch")
|
||||
s.resetDuelState()
|
||||
s.resetDuelState(chatId)
|
||||
return c.Send("Произошла ошибка, дуэль отменена. Попробуйте начать заново.")
|
||||
}
|
||||
|
||||
// Edit the original message to remove the button and show the second player.
|
||||
s.Bot.Edit(s.InitialMessage, fmt.Sprintf("%s начал дуель, ставка: %d\n\n%s принимает участие в дуэли.", s.PlayerOne.FName, s.Summ/2, s.PlayerTwo.FName))
|
||||
s.Bot.Edit(duel.InitialMessage, fmt.Sprintf("%s начал дуель, ставка: %d\n\n%s принимает участие в дуэли.", duel.PlayerOne.FName, duel.Summ/2, duel.PlayerTwo.FName))
|
||||
|
||||
go s.gameProccess(s.InitialMessage)
|
||||
go s.gameProccess(chatId, duel.InitialMessage)
|
||||
return c.Respond()
|
||||
}
|
||||
|
||||
// Clear match
|
||||
func (s *DuelController) ClearMatch(c tele.Context) error {
|
||||
if c.Sender().ID == s.PlayerOne.ID {
|
||||
s.resetDuelState()
|
||||
chatId := c.Chat().ID
|
||||
duel := s.getDuelState(chatId)
|
||||
|
||||
if c.Sender().ID == duel.PlayerOne.ID {
|
||||
s.resetDuelState(chatId)
|
||||
return c.Send(fmt.Sprintf("%s отменил дуель!", c.Sender().FirstName))
|
||||
} else {
|
||||
return c.Send("Отменить дуель может только инициатор!")
|
||||
@@ -155,74 +169,69 @@ func (s *DuelController) ClearMatch(c tele.Context) error {
|
||||
}
|
||||
|
||||
// resetDuelState clears the current duel's information, making it ready for a new one.
|
||||
func (s *DuelController) resetDuelState() {
|
||||
s.PlayerOne.Counter = 0
|
||||
s.PlayerTwo.Counter = 0
|
||||
s.PlayerOne.FName = ""
|
||||
s.PlayerTwo.FName = ""
|
||||
s.PlayerOne.ID = 0
|
||||
s.PlayerTwo.ID = 0
|
||||
s.Summ = 0
|
||||
s.Inited = false
|
||||
s.MatchAccepted = false
|
||||
s.InitialMessage = nil
|
||||
func (s *DuelController) resetDuelState(chatId int64) {
|
||||
delete(s.duels, chatId)
|
||||
}
|
||||
|
||||
// Start Game
|
||||
func (s *DuelController) gameProccess(msg *tele.Message) {
|
||||
func (s *DuelController) gameProccess(chatId int64, msg *tele.Message) {
|
||||
duel := s.getDuelState(chatId)
|
||||
time.Sleep(time.Second * 3)
|
||||
editedMsg, err := s.Bot.Edit(msg, fmt.Sprintf("Дуэль началась!\nНа кону: %d", s.Summ))
|
||||
editedMsg, err := s.Bot.Edit(msg, fmt.Sprintf("Дуэль началась!\nНа кону: %d", duel.Summ))
|
||||
if err != nil {
|
||||
log.Printf("Error sending duel start message: %v", err)
|
||||
s.resetDuelState() // Reset state if we can't even send the message
|
||||
s.resetDuelState(chatId) // Reset state if we can't even send the message
|
||||
return
|
||||
}
|
||||
s.RoundOne(editedMsg)
|
||||
s.RoundOne(chatId, editedMsg)
|
||||
}
|
||||
|
||||
// Round One
|
||||
func (s *DuelController) RoundOne(msg *tele.Message) {
|
||||
func (s *DuelController) RoundOne(chatId int64, msg *tele.Message) {
|
||||
duel := s.getDuelState(chatId)
|
||||
time.Sleep(time.Second * 3)
|
||||
s.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
s.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
msg, _ = s.Bot.Edit(msg,
|
||||
fmt.Sprintf("Результаты первого раунда\n%s: %d очков.\n%s: %d очков.",
|
||||
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
|
||||
duel.PlayerOne.FName, duel.PlayerOne.Counter, duel.PlayerTwo.FName, duel.PlayerTwo.Counter),
|
||||
)
|
||||
s.RoundTwo(msg)
|
||||
s.RoundTwo(chatId, msg)
|
||||
}
|
||||
|
||||
// Round Two
|
||||
func (s *DuelController) RoundTwo(msg *tele.Message) {
|
||||
func (s *DuelController) RoundTwo(chatId int64, msg *tele.Message) {
|
||||
duel := s.getDuelState(chatId)
|
||||
time.Sleep(time.Second * 3)
|
||||
s.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
s.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
msg, _ = s.Bot.Edit(msg,
|
||||
fmt.Sprintf("Результаты второго раунда\n%s: %d очков.\n%s: %d очков.",
|
||||
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
|
||||
duel.PlayerOne.FName, duel.PlayerOne.Counter, duel.PlayerTwo.FName, duel.PlayerTwo.Counter),
|
||||
)
|
||||
s.RoundThree(msg)
|
||||
s.RoundThree(chatId, msg)
|
||||
}
|
||||
|
||||
// Round Three
|
||||
func (s *DuelController) RoundThree(msg *tele.Message) {
|
||||
func (s *DuelController) RoundThree(chatId int64, msg *tele.Message) {
|
||||
duel := s.getDuelState(chatId)
|
||||
time.Sleep(time.Second * 3)
|
||||
s.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
s.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerOne.Counter += rand.Intn(11) + 1
|
||||
duel.PlayerTwo.Counter += rand.Intn(11) + 1
|
||||
msg, _ = s.Bot.Edit(msg,
|
||||
fmt.Sprintf("Результаты третьего раунда\n%s: %d очков.\n%s: %d очков.",
|
||||
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
|
||||
duel.PlayerOne.FName, duel.PlayerOne.Counter, duel.PlayerTwo.FName, duel.PlayerTwo.Counter),
|
||||
)
|
||||
s.CheckWin(msg)
|
||||
s.CheckWin(chatId, msg)
|
||||
}
|
||||
|
||||
// Check Win
|
||||
func (s *DuelController) CheckWin(msg *tele.Message) {
|
||||
// Ensure the duel state is reset regardless of how this function exits.
|
||||
defer s.resetDuelState()
|
||||
func (s *DuelController) CheckWin(chatId int64, msg *tele.Message) {
|
||||
duel := s.getDuelState(chatId)
|
||||
defer s.resetDuelState(chatId)
|
||||
|
||||
userOne := s.DC.GetUser(s.PlayerOne.ID)
|
||||
userTwo := s.DC.GetUser(s.PlayerTwo.ID)
|
||||
userOne := s.DC.GetUser(duel.PlayerOne.ID, chatId)
|
||||
userTwo := s.DC.GetUser(duel.PlayerTwo.ID, chatId)
|
||||
if userOne == nil || userTwo == nil {
|
||||
log.Println("Error: Could not find one or both duel participants in CheckWin.")
|
||||
s.Bot.Edit(msg, "Произошла ошибка, дуэль отменена.")
|
||||
@@ -230,17 +239,17 @@ func (s *DuelController) CheckWin(msg *tele.Message) {
|
||||
}
|
||||
time.Sleep(time.Second * 3)
|
||||
|
||||
var message string = fmt.Sprintf("Дуэль окончена!\n%s: %d очков. vs %s: %d очков.", s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter)
|
||||
var message string = fmt.Sprintf("Дуэль окончена!\n%s: %d очков. vs %s: %d очков.", duel.PlayerOne.FName, duel.PlayerOne.Counter, duel.PlayerTwo.FName, duel.PlayerTwo.Counter)
|
||||
|
||||
if s.PlayerOne.Counter > s.PlayerTwo.Counter {
|
||||
s.Bot.Edit(msg, fmt.Sprintf("%s\n%s победил!", message, s.PlayerOne.FName))
|
||||
s.DC.UpdateDick(userOne.ID, userOne.DickSize+(s.Summ/2))
|
||||
s.DC.UpdateDick(userTwo.ID, userTwo.DickSize-(s.Summ/2))
|
||||
} else if s.PlayerOne.Counter < s.PlayerTwo.Counter {
|
||||
s.Bot.Edit(msg, fmt.Sprintf("%s\n%s победил!", message, s.PlayerTwo.FName))
|
||||
s.DC.UpdateDick(userOne.ID, userOne.DickSize-(s.Summ/2))
|
||||
s.DC.UpdateDick(userTwo.ID, userTwo.DickSize+(s.Summ/2))
|
||||
} else if s.PlayerOne.Counter == s.PlayerTwo.Counter {
|
||||
if duel.PlayerOne.Counter > duel.PlayerTwo.Counter {
|
||||
s.Bot.Edit(msg, fmt.Sprintf("%s\n%s победил!", message, duel.PlayerOne.FName))
|
||||
s.DC.UpdateDick(userOne.ID, chatId, userOne.DickSize+(duel.Summ/2))
|
||||
s.DC.UpdateDick(userTwo.ID, chatId, userTwo.DickSize-(duel.Summ/2))
|
||||
} else if duel.PlayerOne.Counter < duel.PlayerTwo.Counter {
|
||||
s.Bot.Edit(msg, fmt.Sprintf("%s\n%s победил!", message, duel.PlayerTwo.FName))
|
||||
s.DC.UpdateDick(userOne.ID, chatId, userOne.DickSize-(duel.Summ/2))
|
||||
s.DC.UpdateDick(userTwo.ID, chatId, userTwo.DickSize+(duel.Summ/2))
|
||||
} else if duel.PlayerOne.Counter == duel.PlayerTwo.Counter {
|
||||
s.Bot.Edit(msg, fmt.Sprintf("%s\nНичья!", message))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package models
|
||||
|
||||
type User struct {
|
||||
ID int64 `sql:"id"`
|
||||
ChatID int64 `sql:"chat_id"`
|
||||
FirstName string `sql:"fname"`
|
||||
LastName string `sql:"lname"`
|
||||
DickSize int `sql:"dick_size"`
|
||||
|
||||
Reference in New Issue
Block a user