Files
dickbot/src/controllers/duelController.go
SmileRex 9dd043c32c fix
2025-01-23 19:06:56 +03:00

180 lines
4.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"fmt"
"math/rand"
"strconv"
"strings"
"time"
tele "gopkg.in/telebot.v4"
)
type DuelController struct {
PlayerOne struct {
ID int64
Counter int
FName string
}
PlayerTwo struct {
ID int64
Counter int
FName string
}
Summ int
Inited bool
Bot *tele.Bot
DC *DataController
}
// Controller Init
func NewDuel(bot *tele.Bot, dc *DataController) *DuelController {
return &DuelController{
Inited: false,
Bot: bot,
DC: dc,
}
}
// 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))
}
var text string
if strings.Contains(c.Text(), " ") {
text = strings.Split(c.Text(), " ")[1]
fmt.Println("new command", text)
} else {
return c.Send("Некоректная команда, используйте /duel <сумма>")
}
s.Inited = true
s.PlayerOne.ID = c.Sender().ID
s.PlayerOne.FName = c.Sender().FirstName
user := s.DC.GetUser(s.PlayerOne.ID)
summ, err := strconv.Atoi(text)
if err != nil {
return c.Send("Некорректная команда, используйте /duel <сумма>")
} else {
s.Summ = summ
}
if user.DickSize < summ {
return c.Send("У вас недостаточно длинный пенис для состязания!")
}
if summ <= 0 {
return c.Send("Некорректная сумма, используйте положительное значение!")
}
return c.Send(fmt.Sprintf("%s начал дуель, ставка: %d", s.PlayerOne.FName, summ))
}
// Accept Match
func (s *DuelController) AcceptMatch(c tele.Context) error {
if !s.Inited {
return c.Send("Дуэль еще не началась! Дождитесь старта матча или начните новую дуель с помощью /duel <сумма>")
}
s.PlayerTwo.ID = c.Sender().ID
s.PlayerTwo.FName = c.Sender().FirstName
user := s.DC.GetUser(s.PlayerTwo.ID)
if user.DickSize < s.Summ {
return c.Send("У вас недостаточно длинный пенис для состязания!")
}
if s.PlayerTwo.ID == s.PlayerOne.ID {
return c.Send("Вы не можете принять участие в своей же дуэли!")
}
s.Summ *= 2
go s.gameProccess(c.Chat())
return c.Send(fmt.Sprintf("%s принимает участие в дуэли.", s.PlayerTwo.FName))
}
// Start Game
func (s *DuelController) gameProccess(r tele.Recipient) {
time.Sleep(time.Second * 3)
s.Bot.Send(r, fmt.Sprintf("Дуэль началась!\nНа кону: %d", s.Summ))
s.RoundOne(r)
}
// Round One
func (s *DuelController) RoundOne(r tele.Recipient) {
time.Sleep(time.Second * 3)
s.PlayerOne.Counter += rand.Intn(11) + 1
s.PlayerTwo.Counter += rand.Intn(11) + 1
s.Bot.Send(r,
fmt.Sprintf("Результаты первого раунда\nИгрок %s: %d очков.\nИгрок %s: %d очков.",
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
)
s.RoundTwo(r)
}
// Round Two
func (s *DuelController) RoundTwo(r tele.Recipient) {
time.Sleep(time.Second * 3)
s.PlayerOne.Counter += rand.Intn(11) + 1
s.PlayerTwo.Counter += rand.Intn(11) + 1
s.Bot.Send(r,
fmt.Sprintf("Результаты второго раунда\nИгрок %s: %d очков.\nИгрок %s: %d очков.",
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
)
s.RoundThree(r)
}
// Round Three
func (s *DuelController) RoundThree(r tele.Recipient) {
time.Sleep(time.Second * 3)
s.PlayerOne.Counter += rand.Intn(11) + 1
s.PlayerTwo.Counter += rand.Intn(11) + 1
s.Bot.Send(r,
fmt.Sprintf("Результаты третьего раунда\nИгрок %s: %d очков.\nИгрок %s: %d очков.",
s.PlayerOne.FName, s.PlayerOne.Counter, s.PlayerTwo.FName, s.PlayerTwo.Counter),
)
s.CheckWin(r)
}
// Check Win
func (s *DuelController) CheckWin(r tele.Recipient) {
userOne := s.DC.GetUser(s.PlayerOne.ID)
userTwo := s.DC.GetUser(s.PlayerTwo.ID)
time.Sleep(time.Second * 3)
var winner int = 0
if s.PlayerOne.Counter > s.PlayerTwo.Counter {
winner = 1
} else {
winner = 2
}
if winner == 1 {
s.Bot.Send(r, fmt.Sprintf("Игрок %s победил!", s.PlayerOne.FName))
s.DC.UpdateDick(userOne.ID, userOne.DickSize+(s.Summ/2))
s.DC.UpdateDick(userTwo.ID, userTwo.DickSize-(s.Summ/2))
s.Inited = false
} else if winner == 2 {
s.Bot.Send(r, fmt.Sprintf("Игрок %s победил!", s.PlayerTwo.FName))
s.DC.UpdateDick(userOne.ID, userOne.DickSize-(s.Summ/2))
s.DC.UpdateDick(userTwo.ID, userTwo.DickSize+(s.Summ/2))
s.Inited = false
} else {
s.Bot.Send(r, "Ничья!")
s.Inited = false
}
s.PlayerOne.Counter = 0
s.PlayerTwo.Counter = 0
s.Summ = 0
}