Add specific chat data and pass chaos to an entire day
All checks were successful
the build was successful
All checks were successful
the build was successful
This commit is contained in:
parent
31c4a24de0
commit
b781ae9f53
3
.gitignore
vendored
3
.gitignore
vendored
@ -16,4 +16,5 @@
|
||||
|
||||
settings_custom.json
|
||||
history.json
|
||||
users.json
|
||||
users.json
|
||||
chat_data.json
|
@ -2,7 +2,7 @@
|
||||
* @Author: Bartuccio Antoine
|
||||
* @Date: 2018-07-23 15:24:22
|
||||
* @Last Modified by: klmp200
|
||||
* @Last Modified time: 2018-07-26 22:32:59
|
||||
* @Last Modified time: 2018-07-27 16:13:32
|
||||
*/
|
||||
|
||||
package main
|
||||
@ -40,6 +40,8 @@ func main() {
|
||||
settings.Settings["history file"].(string))
|
||||
log.Println("Initialize users infos")
|
||||
shared.InitUsers(settings.Settings["users file"].(string))
|
||||
log.Println("Initialize chat data")
|
||||
shared.InitChatData(settings.Settings["chat data file"].(string))
|
||||
|
||||
log.Println("Bot initialisation")
|
||||
b, err := tb.NewBot(tb.Settings{
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @Author: Bartuccio Antoine
|
||||
* @Date: 2018-07-25 18:51:38
|
||||
* @Last Modified by: klmp200
|
||||
* @Last Modified time: 2018-07-26 22:52:51
|
||||
* @Last Modified time: 2018-07-27 16:49:59
|
||||
*/
|
||||
|
||||
package commands
|
||||
@ -15,17 +15,10 @@ import (
|
||||
tb "gopkg.in/tucnak/telebot.v2"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type sjw struct {
|
||||
usable bool
|
||||
mutex sync.Mutex
|
||||
}
|
||||
|
||||
var client *twitter.Client
|
||||
var sjw_usable sjw
|
||||
|
||||
func initTwitter() {
|
||||
config := oauth1.NewConfig(
|
||||
@ -39,7 +32,6 @@ func initTwitter() {
|
||||
|
||||
http_client := config.Client(oauth1.NoContext, token)
|
||||
client = twitter.NewClient(http_client)
|
||||
sjw_usable = sjw{usable: true}
|
||||
}
|
||||
|
||||
func testOrInitTwitter() {
|
||||
@ -52,13 +44,6 @@ func twitterCommunicationError(m *tb.Message) {
|
||||
shared.Bot.Send(m.Chat, "Désolé, les serveurs de twitter sont injoignables.")
|
||||
}
|
||||
|
||||
func unlockSjw() {
|
||||
time.Sleep(time.Hour)
|
||||
sjw_usable.mutex.Lock()
|
||||
sjw_usable.usable = true
|
||||
sjw_usable.mutex.Unlock()
|
||||
}
|
||||
|
||||
func LastTrumpTweet(m *tb.Message) {
|
||||
testOrInitTwitter()
|
||||
user, _, err := client.Users.Show(&twitter.UserShowParams{ScreenName: "realDonaldTrump"})
|
||||
@ -101,13 +86,21 @@ func TwitterTrends(m *tb.Message) {
|
||||
|
||||
func TwitterSJW(m *tb.Message) {
|
||||
testOrInitTwitter()
|
||||
sjw_usable.mutex.Lock()
|
||||
defer sjw_usable.mutex.Unlock()
|
||||
if !sjw_usable.usable {
|
||||
shared.Bot.Send(m.Chat, "Arioch ne répondra pas à votre appel.")
|
||||
return
|
||||
last_use, exists := shared.ChatData.Get(m.Chat.ID, "last chaos use")
|
||||
if exists {
|
||||
var date time.Time
|
||||
if _, is_string := last_use.(string); is_string {
|
||||
date, _ = time.Parse(time.RFC3339, last_use.(string))
|
||||
} else {
|
||||
date = last_use.(time.Time)
|
||||
}
|
||||
if time.Now().Before(date.Add(time.Hour * 24)) {
|
||||
shared.Bot.Send(m.Chat, "Arioch ne répondra pas à votre appel.")
|
||||
return
|
||||
}
|
||||
}
|
||||
sjw_usable.usable = false
|
||||
shared.ChatData.Set(m.Chat.ID, "last chaos use", time.Now())
|
||||
|
||||
tweets, _, err := client.Search.Tweets(&twitter.SearchTweetParams{
|
||||
Query: "#SJW",
|
||||
})
|
||||
@ -118,5 +111,4 @@ func TwitterSJW(m *tb.Message) {
|
||||
for _, tweet := range tweets.Statuses {
|
||||
shared.Bot.Send(m.Chat, tweet.Text)
|
||||
}
|
||||
go unlockSjw()
|
||||
}
|
||||
|
@ -6,5 +6,6 @@
|
||||
"twitter consumer secret": "INSERT TOKEN HERE",
|
||||
"history size": 10,
|
||||
"history file": "history.json",
|
||||
"users file": "users.json"
|
||||
"users file": "users.json",
|
||||
"chat data file": "chat_data.json"
|
||||
}
|
82
shared/chat.go
Normal file
82
shared/chat.go
Normal file
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* @Author: Bartuccio Antoine
|
||||
* @Date: 2018-07-27 15:37:59
|
||||
* @Last Modified by: klmp200
|
||||
* @Last Modified time: 2018-07-27 16:06:51
|
||||
*/
|
||||
|
||||
package shared
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"io/ioutil"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// General purpose chat info storage
|
||||
type chatData struct {
|
||||
mutex sync.Mutex
|
||||
data map[int64]map[string]interface{}
|
||||
}
|
||||
|
||||
type chatDataFile struct {
|
||||
mutex sync.Mutex
|
||||
path string
|
||||
}
|
||||
|
||||
var ChatData chatData
|
||||
var cdf chatDataFile
|
||||
|
||||
// Init chat data meant to store infos about a chat.
|
||||
func InitChatData(path string) {
|
||||
cdf = chatDataFile{path: path}
|
||||
ChatData = chatData{data: make(map[int64]map[string]interface{})}
|
||||
ChatData.mutex.Lock()
|
||||
defer ChatData.mutex.Unlock()
|
||||
cdf.read()
|
||||
|
||||
}
|
||||
|
||||
func (c chatData) Set(chat int64, key string, data interface{}) {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
if _, exists := c.data[chat]; !exists {
|
||||
c.data[chat] = make(map[string]interface{})
|
||||
}
|
||||
c.data[chat][key] = data
|
||||
go cdf.write()
|
||||
}
|
||||
|
||||
func (c chatData) Get(chat int64, key string) (interface{}, bool) {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
m, exists := c.data[chat]
|
||||
if !exists {
|
||||
return nil, false
|
||||
}
|
||||
data, ok := m[key]
|
||||
if !ok {
|
||||
return nil, false
|
||||
}
|
||||
return data, true
|
||||
}
|
||||
|
||||
func (c chatDataFile) read() {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
data, err := ioutil.ReadFile(c.path)
|
||||
if err != nil {
|
||||
// File doesn't exist, skip import
|
||||
return
|
||||
}
|
||||
json.Unmarshal(data, &ChatData.data)
|
||||
}
|
||||
|
||||
func (c chatDataFile) write() {
|
||||
c.mutex.Lock()
|
||||
defer c.mutex.Unlock()
|
||||
ChatData.mutex.Lock()
|
||||
defer ChatData.mutex.Unlock()
|
||||
data, _ := json.Marshal(ChatData.data)
|
||||
ioutil.WriteFile(c.path, data, 0770)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user