Size: a a a

2020 December 27

JS

Just_Miracle Soronba... in JS Liberty
честно
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
не всегда
источник

JS

Just_Miracle Soronba... in JS Liberty
месяцами люди тратят время на гууд архитектуру
источник

JS

Just_Miracle Soronba... in JS Liberty
в дальнейшем чтобы вот так не ебаться
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
я сначала говнокодю для теста а потом привожу в порядок
источник

N

Nick in JS Liberty
Зомби 🧟‍♂️
@IwillDeliver твой друг походу писал
Протеже
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
вот тут уже в порядок привел
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
package controllers

import (
 "fmt"
 "github.com/jinzhu/gorm"
 "github.com/zombiedevel/photobot/models"
 "github.com/zombiedevel/photobot/payments"
 "github.com/zombiedevel/photobot/pkg/database"
 "github.com/zombiedevel/photobot/utils"
 tb "gopkg.in/tucnak/telebot.v2"
 "log"
 "time"
)

var db *gorm.DB
var err error

func StartCommand(m *tb.Message, b *tb.Bot) {
 if createUser(m.Sender) {
   log.Printf("User %s Telegram ID: %d created.", m.Sender.Username, m.Sender.ID)
 }
 u := getUserData(m.Sender)
 msg, err := utils.MsgTpl("start", "templates/bot/start.tmpl", &struct {
   FirstName  string
   Balance    int
   MsgBalance bool
 }{
   FirstName:  u.FirstName,
   Balance:    u.Balance,
   MsgBalance: func(b int) bool { return b > 0 }(u.Balance),
 })
 utils.CheckError(err)
 b.Send(m.Sender, msg, &tb.SendOptions{ParseMode: tb.ModeHTML})
}

func createUser(u *tb.User) bool {
 db = database.GetDB()
 var user models.Users
 user.TelegramId = u.ID
 user.Username = u.Username
 user.FirstName = u.FirstName
 user.Balance = 0
 db.Model(&models.Users{}).Create(&user)
 if user.ID > 0 {
   return true
 } else {
   return false
 }
}
//Сообщение с оплатой
func PaymentReply(m *tb.Message, b *tb.Bot) {
 keyInline := &tb.ReplyMarkup{Selective: false}
 var btnPay50 = keyInline.Data("Оплатить 50р", "pay_50", "50")
 var btnPay100 = keyInline.Data("Оплатить 100р", "pay_100", "100")
 var btnPay200 = keyInline.Data("Оплатить 200р", "pay_200", "200")
 keyInline.Inline(keyInline.Row(btnPay50, btnPay100, btnPay200))
 msg, err := utils.MsgTpl("balance", "templates/bot/balance.tmpl", &struct {
   Balance int
 }{
   Balance: getUserBalance(m.Sender),
 })
 utils.CheckError(err)
 b.Reply(m, msg, keyInline)
 b.Handle(&btnPay50, payHandle(m, b, 50))
 b.Handle(&btnPay100, payHandle(m, b, 100))
 b.Handle(&btnPay200, payHandle(m, b, 200))
}

func payHandle(m *tb.Message, b *tb.Bot, sum int) func(c *tb.Callback) {
 return func(c *tb.Callback) {
   payButtons := &tb.ReplyMarkup{Selective: false}
   pay := payments.YooRequestPay(sum, m.Sender.ID, "bank_card")
   payButtons.Inline(payButtons.Row(payButtons.URL(fmt.Sprintf("Оплатить %d рублей", sum), pay.Confirmation.ConfirmationURL)))
   b.Reply(m, fmt.Sprintf("Оплата %d рублей", sum), payButtons)
   go func() {
     for _ = range time.Tick(time.Second * 3) {
       if payments.YooPayStatusRequest(pay.ID).Status == "waiting_for_capture" {
         msg, err := utils.MsgTpl("start", "templates/bot/pay_success.tmpl", &struct {
           Balance int
         }{
           Balance: addUserBalance(sum, m.Sender),
         })
         utils.CheckError(err)
         b.Reply(m, msg, &tb.SendOptions{ParseMode: tb.ModeHTML})
         return
       }
     }
   }()
 }
}
func PhotoReply(m *tb.Message, b *tb.Bot) {
 if deductUserBalance(m.Sender) == true {
   //b.Reply(m, "You send as photo. For high quality please send as file.")
   save := saveImage(m, b, "photo")
   p := &tb.Photo{File: tb.FromDisk(save)}
   b.SendAlbum(m.Sender, tb.Album{p, p})
 } else {
   PaymentReply(m, b)

 }
}

func DocumentReply(m *tb.Message, b *tb.Bot) {
 if deductUserBalance(m.Sender) == true {
   //b.Reply(m, "You send as photo. For high quality please send as file.")
   save := saveImage(m, b, "document")
   p := &tb.Photo{File: tb.FromDisk(save)}
   b.SendAlbum(m.Sender, tb.Album{p, p})
 } else {
   PaymentReply(m, b)

 }
}

func saveImage(m *tb.Message, b *tb.Bot, t string) string {

 path := fmt.Sprintf("uploads/%s.jpg", utils.MakeUUID())
 fmt.Println(path)
 switch t {
 case "photo":
   b.Download(&m.Photo.File, path)
 case "document": b.Download(&m.Document.File, path)

 }
 return path
}
func getUserBalance(u *tb.User) int {
 db = database.GetDB()
 var user models.Users
 db.Model(&models.Users{}).Select("balance").Where("telegram_id = ?", u.ID).First(&user)
 return user.Balance
}
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty


//Информация о пользователе
func getUserData(u *tb.User) models.Users {
 db = database.GetDB()
 var user models.Users
 db.Model(&models.Users{}).Where("telegram_id = ?", u.ID).First(&user)
 return user
}
func addUserBalance(sum int, u *tb.User) int {
 db = database.GetDB()
 currentBalance := getUserBalance(u)
 db.Model(&models.Users{}).Where("telegram_id = ?", u.ID).Update("balance", currentBalance+sum)
 return getUserBalance(u)
}
func deductUserBalance(u *tb.User) bool {
 db = database.GetDB()
 drop := 50
 currentBalance := getUserBalance(u)
 fmt.Println(currentBalance)
 if currentBalance > 0 && currentBalance >= drop {
   db.Model(&models.Users{}).Where("telegram_id = ?", u.ID).Update("balance", currentBalance-drop)
   return true
 } else {
   return false
 }

}
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
а до совсем пиздец был)
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
на 500+ строк
источник

JS

Just_Miracle Soronba... in JS Liberty
нихуя баклажан
источник

JS

Just_Miracle Soronba... in JS Liberty
ты когда начал на го пилить что то
источник

JS

Just_Miracle Soronba... in JS Liberty
ты же сидрочер
источник

JS

Just_Miracle Soronba... in JS Liberty
=)))
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
когда ты под стол пехом ходил)
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
в прямом смысле
источник

NR

Nikolai Reguliarniy in JS Liberty
на скринах - константы не в энумах, страшная конкатенация через +
это вообще не страшно
источник

З🧟

Зомби 🧟‍♂️... in JS Liberty
в 2008 по моему я го попробовал
источник

NR

Nikolai Reguliarniy in JS Liberty
вот контроллеры по 18к строк - это страшно
источник