-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
135 lines (123 loc) · 3.46 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package main
import (
"fmt"
"gopkg.in/telegram-bot-api.v4"
"log"
"os"
"strconv"
"encoding/json"
_ "github.com/go-sql-driver/mysql"
"database/sql"
)
var db *sql.DB
var param string
var err error
var reply string
var query string
var count int
var answer string
var id int64
type Config struct {
TelegramBotToken string
Host string
DBName string
User string
Password string
}
func main() {
//Читаем файл с настройками
file, _ := os.Open("config.json")
log.Printf("load file")
decoder := json.NewDecoder(file)
conf := Config{}
err := decoder.Decode(&conf)
if err != nil {
log.Panic(err)
}
fmt.Println(conf.TelegramBotToken)
//Подключаемся к БД
param := conf.User + ":" + conf.Password + "@tcp(" + conf.Host + ":3306)/" + conf.DBName
db, err = sql.Open("mysql", param)
if err != nil {
panic(err.Error())
}
defer db.Close()
//Подключаемся к Telegram
bot, err := tgbotapi.NewBotAPI(conf.TelegramBotToken)
if err != nil {
log.Panic(err)
}
bot.Debug = false
log.Printf("Authorized on account %s", bot.Self.UserName)
u := tgbotapi.NewUpdate(0)
u.Timeout = 60
updates, err := bot.GetUpdatesChan(u)
if err != nil {
log.Panic(err)
}
for update := range updates {
//Читаем данные о пользователе, написавшем сообщение
UserID := update.Message.From.ID
ChatID := update.Message.Chat.ID
FirstName := update.Message.From.FirstName
LastName := update.Message.From.LastName
UserName := FirstName + " " + LastName
Text := update.Message.Text
log.Printf("%s %d %d %s", UserName, UserID, ChatID, Text)
//Определяем, есть ли пользователь в БД - если нет, то добавляем его в БД
//если есть - рассылаем его сообщение всем пользователям из БД
query = "SELECT count(*) FROM golangbot.users WHERE userid=" + strconv.Itoa(UserID);
log.Printf(query)
result, err := db.Query(query)
if err != nil {
log.Panic(err)
}
for result.Next() {
err = result.Scan(&count)
if err != nil {
log.Panic(err)
}
}
log.Printf("%d", count)
if count == 0 {
//Добавление пользователя в БД
_, err = db.Exec("INSERT INTO users(userid, firstname, lastname) VALUES(?, ?, ?)", UserID, FirstName, LastName)
if err != nil {
log.Panic(err)
}
answer := "Добро пожаловать, " + FirstName + " " + LastName + "!"
msg := tgbotapi.NewMessage(update.Message.Chat.ID, answer)
bot.Send(msg)
} else {
//Удаление пользователя
if Text == "DELETEME" {
_, err = db.Exec("DELETE FROM users WHERE userid=?", UserID)
if err != nil {
log.Panic(err)
}
answer := "Вы удалены из списка рассылки"
msg := tgbotapi.NewMessage(update.Message.Chat.ID, answer)
bot.Send(msg)
log.Printf("Пользователь %d удален", UserID)
} else {
query = "select userid from golangbot.users";
log.Printf(query)
result, err := db.Query(query)
if err != nil {
log.Panic(err)
}
//Рассылка всем пользователям из базы данных
for result.Next() {
err = result.Scan(&id)
if err != nil {
log.Panic(err)
}
log.Printf("%d", id)
msg := tgbotapi.NewMessage(id, Text)
msg.ReplyToMessageID = update.Message.MessageID
bot.Send(msg)
}
}
}
}
}