Skip to content
Snippets Groups Projects
Commit 9d2f1d8a authored by Levatax's avatar Levatax
Browse files

earning currency by sending messages and staying at voice, reference code system for invite rewards

parent 50c10d6c
Branches
No related tags found
No related merge requests found
package main package main
import ( import (
"math/rand"
"strconv"
"time"
"git.randomchars.net/freenitori/log" "git.randomchars.net/freenitori/log"
"git.randomchars.net/freenitori/multiplexer" "git.randomchars.net/freenitori/multiplexer"
) )
func init() { func init() {
m.Route(&multiplexer.Route{ m.Route(&multiplexer.Route{
Pattern: "ping", Pattern: "cuzdan",
AliasPatterns: []string{"pong"}, AliasPatterns: []string{"cüzdan","balance","para","param","cüzdanım","bal"},
Description: "ping pong.", Description: "cüzdan bilgisi",
Category: system, Category: system,
Handler: func(context *multiplexer.Context) { Handler: func(context *multiplexer.Context) {
err := Database.Set("key", "hello world") data, err := Database.Get(context.User.ID)
if err != nil && data == 0 {
err = Database.Set(context.User.ID, 1)
if err != nil { if err != nil {
log.Info(err) log.Info("cannot create new key for this user")
}
} }
context.Session.ChannelMessageSend(context.Channel.ID, "Pong") data, err = Database.Get(context.User.ID)
log.Infof("Pong! " + context.User.Username) if err != nil {
log.Info("Something went wrong again")
} else {
balstring := strconv.Itoa(int(data))
context.SendMessage("Cüzdanında " + balstring + " <:valorcoin:913838260738990110> var")
}
}, },
}) })
m.Route(&multiplexer.Route{ m.Route(&multiplexer.Route{
Pattern: "get", Pattern: "getcode",
AliasPatterns: []string{"value"}, AliasPatterns: []string{"kodal","referans", "ref", "kod"},
Description: "database test.", Description: "referans kodu",
Category: system, Category: system,
Handler: func(context *multiplexer.Context) { Handler: func(context *multiplexer.Context) {
data, err := Database.Get("key2")
data, err := Database.Get(context.User.ID + "ref")
if err != nil && data == 0 {
randInt := rand.Intn(9999-1) + 1
log.Info(randInt)
err = Database.Set(context.User.ID + "ref", uint64(randInt))
if err != nil {
log.Info("cannot insert ref code")
}
}
data, err = Database.Get(context.User.ID + "ref")
if err != nil {
log.Info("Cannot get ref code")
} else {
err := Database.SaveRefCode(data, context.User.ID)
if err != nil { if err != nil {
log.Info(err) log.Info("Cannot save ref code")
}
refstring := strconv.Itoa(int(data))
context.SendMessage("Referans kodunuz `" + refstring +"` davet ettiğiniz arkadaşlarınız !kullan referanskodu yaparak hem kendileri hem siz 50 <:valorcoin:913838260738990110> kazanabilirsiniz.")
}
},
})
m.Route(&multiplexer.Route{
Pattern: "kullan",
AliasPatterns: []string{"use","gir"},
Description: "referans kodu kullanma",
Category: system,
Handler: func(context *multiplexer.Context) {
data, err := Database.Get(context.User.ID + "usedref")
if err != nil && data == 0 {
err = Database.Set(context.User.ID + "usedref", 0)
if err != nil {
log.Info("cannot insert usedref code")
}
}
data, err = Database.Get(context.User.ID + "usedref")
if err != nil {
log.Info("cannot get usedref code")
}
if data == 1 {
context.SendMessage("Kodunu zaten kullandın")
}
jointime, err := context.Member.JoinedAt.Parse()
if err != nil {
log.Info("can't get member join time")
} else {
if time.Now().Unix() - jointime.Unix() > 153600 {
context.SendMessage("Sunucuya katıldıktan sonra 48 saat içerisinde kodu girmeniz gerekiyordu.")
} else {
refcode := context.Fields[1]
refint, err := strconv.Atoi(refcode)
if err != nil {
log.Info("cannot convert ref code")
}
data, err := Database.GetRefCode(uint64(refint))
if err != nil || data == " " {
log.Info("can't find this ref code")
context.SendMessage("Hatalı bir kod girdiniz.")
} else {
err := Database.Add(data, 50)
if err != nil {
log.Info("cannot add 50")
}
err = Database.Add(context.User.ID, 50)
if err != nil {
log.Info("cannot add 50 to code user")
} else {
context.SendMessage("Tebrikler, siz ve arkadaşınız 50 <:valorcoin:913838260738990110> kazandınız!")
}
}
}
} }
context.Session.ChannelMessageSend(context.Channel.ID, "getting value " + data)
log.Infof("Nice! " + context.User.Username )
}, },
}) })
} }
\ No newline at end of file
...@@ -12,11 +12,13 @@ var configPath string ...@@ -12,11 +12,13 @@ var configPath string
var defaultConfig = configPayload{ var defaultConfig = configPayload{
Prefix: "!", Prefix: "!",
Token: "TOKEN", Token: "TOKEN",
DatabasePath: "DatabasePath",
} }
type configPayload struct { type configPayload struct {
Prefix string Prefix string
Token string Token string
DatabasePath string
} }
func init() { func init() {
......
...@@ -2,6 +2,7 @@ package main ...@@ -2,6 +2,7 @@ package main
import ( import (
ldb "github.com/syndtr/goleveldb/leveldb" ldb "github.com/syndtr/goleveldb/leveldb"
"encoding/binary"
) )
var Database LevelDB var Database LevelDB
...@@ -19,22 +20,42 @@ func (db *LevelDB) Open(path string) error { ...@@ -19,22 +20,42 @@ func (db *LevelDB) Open(path string) error {
return nil return nil
} }
func (db *LevelDB) Get(key string) (string, error) { func (db *LevelDB) Get(key string) (uint64, error) {
data , err := db.database.Get([]byte(key), nil) data , err := db.database.Get([]byte(key), nil)
if err != nil { if err != nil {
return string(data), err return 0, err
}
return binary.LittleEndian.Uint64(data), nil
} }
return string(data), err func (db *LevelDB) Set(key string, value uint64) error {
payload := make([]byte, 8)
binary.LittleEndian.PutUint64(payload, value)
return db.database.Put([]byte(key), []byte(payload), nil)
} }
func (db *LevelDB) Set(key, value string) error { func (db *LevelDB) Add(key string, value uint64) error {
err := db.database.Put([]byte(key), []byte(value), nil) data , err := db.database.Get([]byte(key), nil)
if err != nil { if err != nil {
return err return err
} else {
return nil
} }
payload := make([]byte, 8)
binary.LittleEndian.PutUint64(payload, binary.LittleEndian.Uint64(data) + value)
return db.database.Put([]byte(key), []byte(payload), nil)
}
func (db *LevelDB) SaveRefCode(key uint64, value string) error{
payload := make([]byte, 8)
binary.LittleEndian.PutUint64(payload, key)
return db.database.Put([]byte(payload), []byte(value), nil)
}
func (db *LevelDB) GetRefCode(key uint64) (string, error){
payload := make([]byte, 8)
binary.LittleEndian.PutUint64(payload, key)
data , err := db.database.Get([]byte(payload), nil)
if err != nil {
return " ", err
}
return string(data), nil
} }
\ No newline at end of file
module main module git.randomchars.net/levatax/new-economy-bot
go 1.17 go 1.17
......
package main package main
import ( import (
"time"
"git.randomchars.net/freenitori/log" "git.randomchars.net/freenitori/log"
"git.randomchars.net/freenitori/multiplexer" "git.randomchars.net/freenitori/multiplexer"
"github.com/bwmarrin/discordgo"
) )
func init() { func init() {
m.MessageCreate = append(m.MessageCreate, messageHandler) m.MessageCreate = append(m.MessageCreate, messageHandler)
m.VoiceStateUpdate = append(m.VoiceStateUpdate, voiceHandler)
} }
func messageHandler(context *multiplexer.Context) { func messageHandler(context *multiplexer.Context) {
log.Infof(context.User.Username + "#" + context.User.Discriminator + " sent the following message: " + context.Message.Content)
data, err := Database.Get(context.User.ID)
if err != nil && data == 0 {
err = Database.Set(context.User.ID, 1)
if err != nil {
log.Info("cannot create new key for this user")
}
}
err = Database.Add(context.User.ID, 1)
if err != nil {
log.Info("cannot add 1 for messaging")
}
}
func voiceHandler(context *multiplexer.Context) {
// Lookup channel in allowed map
if context.Channel == nil {
log.Info("Chat initiate skipped on irrelevant channel.")
data, err := Database.Get(context.User.ID+"voicejoin")
if err != nil {
log.Info(err)
}
timenow := int(time.Now().Unix())
if err != nil {
log.Info(err)
}
duration := uint64(timenow) - data
log.Info(duration)
Database.Add(context.User.ID, duration/10)
return
}
// Get event
var event *discordgo.VoiceStateUpdate
if e, ok := context.Event.(*discordgo.VoiceStateUpdate); !ok {
log.Info("Chat initiate skipped on incorrect event.")
return
} else {
event = e
}
if event.VoiceState != nil {
if event.VoiceState.ChannelID == "" {
log.Info("Chat initiate skipped on empty channel ID.")
return
}
} else {
log.Info("Chat initiate skipped on nil voice state.")
return
}
// Get member from cache and add to cache if not exist
var member *discordgo.Member
if u, err := context.Session.State.Member(event.GuildID, event.UserID); err != nil {
if u, err = context.Session.GuildMember(event.GuildID, event.UserID); err != nil {
log.Errorf("Error getting member %s (%s), %s", event.UserID, event.GuildID, err)
return
} else {
member = u
_ = context.Session.State.MemberAdd(u)
}
} else {
member = u
}
if member == nil {
log.Info("Chat initiate skipped on nil member.")
return
}
// Workaround for weird bug where the event has no guild ID
if member.GuildID == "" {
member.GuildID = event.GuildID
}
if event.BeforeUpdate == nil {
timenow := uint64(time.Now().Unix())
err := Database.Set(context.User.ID + "voicejoin", timenow)
if err != nil {
log.Info("cannot insert join time")
}
}
} }
\ No newline at end of file
...@@ -86,7 +86,7 @@ func main() { ...@@ -86,7 +86,7 @@ func main() {
m.SessionRegisterHandlers(session) m.SessionRegisterHandlers(session)
m.Prefix = config.Prefix m.Prefix = config.Prefix
m.Categories = append(m.Categories, system) m.Categories = append(m.Categories, system)
err := Database.Open("/tmp/test.db") err := Database.Open(config.DatabasePath)
if err != nil { if err != nil {
log.Info(err) log.Info(err)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment