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