· 6 years ago · Sep 02, 2019, 01:38 PM
1package main
2
3import (
4 "log"
5 "github.com/go-telegram-bot-api/telegram-bot-api"
6 "database/sql"
7 _ "github.com/go-sql-driver/mysql"
8 "fmt"
9)
10
11var admin [1] int64
12
13func isadmin(admin [len(admin)]int64, str int64) bool {
14 for _, a := range admin {
15 if a == str {
16 return true
17 }
18 }
19 return false
20 }
21
22
23func main() {
24 admin[0] = 402072799
25 //admin[1] = 393970665
26 fmt.Println("Admins:", admin)
27 bot, err := tgbotapi.NewBotAPI("-------------------------------------")
28 if err != nil {
29 log.Panic(err)
30 }
31
32 //Connect to database
33 db, err := sql.Open("mysql", "root:-------@tcp(127.0.0.1:3306)/bot")
34 if err != nil {panic(err.Error())}
35 defer db.Close()
36 if(db != nil){ log.Printf("Db funge, ye") }
37 //Create the Table
38 create, err := db.Query("CREATE TABLE IF NOT EXISTS data (`userID` BIGINT NOT NULL , `status` TEXT NOT NULL )")
39 if err != nil {panic(err.Error())}
40 defer create.Close()
41 var status string
42
43
44 //bot.Debug = true
45
46 log.Printf("Authorized on account %s", bot.Self.UserName)
47
48 u := tgbotapi.NewUpdate(0)
49 u.Timeout = 60
50
51 updates, err := bot.GetUpdatesChan(u)
52
53
54 for update := range updates {
55
56 //log.Printf("[%s] %s", update.Message.From.UserName, update.Message.Text)
57
58 if update.Message == nil {
59 continue
60 }
61
62 if update.Message != nil {
63 err:= db.QueryRow("SELECT status FROM data WHERE userID=?", update.Message.Chat.ID).Scan(&status)
64 if err != nil {
65 insert, err := db.Query("INSERT INTO data VALUES (?, 'home')", update.Message.Chat.ID)
66 err = db.QueryRow("SELECT status FROM data WHERE userID=?", update.Message.Chat.ID).Scan(&status)
67 if err != nil {
68 log.Printf("Utente non aggiunto")
69 panic(err.Error())
70
71 }
72 defer insert.Close()
73 }
74
75 //Comandi
76 msg := tgbotapi.NewMessage(update.Message.Chat.ID, "")
77 switch update.Message.Command() {
78 case "start":
79 updateq, err := db.Query("UPDATE data SET status='home' WHERE userID=?", update.Message.Chat.ID)
80 if err != nil {
81 log.Printf("Utente non aggiornato :C")
82 panic(err.Error())
83 }
84 defer updateq.Close()
85 msg.ParseMode = "HTML"
86 msg.DisableWebPagePreview = true
87 msg.Text = "?? Ehy <i>" + update.Message.From.FirstName + "</i>, benvenuto nel <b>ChatBot</b> di <a href='https://t.me/asadashinosao'>Invy55</a> creato in <b>GO</b>.\n<i>Premi il bottone qui sotto per avviare la chat con lui.</i>"
88 if !(isadmin(admin, update.Message.Chat.ID)){
89 msg.ReplyMarkup = tgbotapi.NewInlineKeyboardMarkup(
90 tgbotapi.NewInlineKeyboardRow(
91 tgbotapi.NewInlineKeyboardButtonData("? Chat","chat"),
92 ),
93 )
94 }
95 del := tgbotapi.NewDeleteMessage(update.Message.Chat.ID, update.Message.MessageID)
96 bot.Send(del)
97 bot.Send(msg)
98 }
99 //Forward
100 if !(isadmin(admin, update.Message.Chat.ID)){
101 if status == "chat"{
102 for i := 0; i < len(admin); i++ {
103 fw := tgbotapi.NewForward(admin[i], update.Message.Chat.ID, update.Message.MessageID)
104 bot.Send(fw)
105 }
106 }else{
107 updateq, err := db.Query("UPDATE data SET status='chat' WHERE userID=?", update.Message.Chat.ID)
108 if err != nil {
109 log.Printf("Utente non aggiornato :C")
110 panic(err.Error())
111 }
112 defer updateq.Close()
113 msg.ParseMode = "HTML"
114 msg.DisableWebPagePreview = true
115 msg.ReplyMarkup = tgbotapi.NewInlineKeyboardMarkup(
116 tgbotapi.NewInlineKeyboardRow(
117 tgbotapi.NewInlineKeyboardButtonData("? Esci","esci"),
118 ),
119 )
120 msg.Text = "? Il messaggio da te inviato non è stato recapitato, invialo ora.\nUsa il pulsante sottostante o /start per chiudere la chat"
121 bot.Send(msg)
122 }
123 }
124
125 //Reply degli admin
126 //if update.Message.ReplyToMessage.ForwardFromChat.ID != 0 {
127 if update.Message.Photo != nil{
128 /*fmt.Println(update.Message.Photo.fileID)
129 msg := tgbotapi.NewPhotoShare(update.Message.ReplyToMessage.From.ID, )
130 msg.Text = "Photo"
131 bot.Send(msg)*/
132 }else if update.Message.Video != nil{
133 vid := tgbotapi.NewVideoShare(update.Message.ReplyToMessage.ForwardFromChat.ID, update.Message.Video.FileID)
134 //vid.Caption = update.Message.Caption
135 bot.Send(vid)
136 }else if update.Message.VideoNote != nil{
137 vidnot := tgbotapi.NewVideoNoteShare(update.Message.ReplyToMessage.ForwardFromChat.ID, update.Message.VideoNote.Length, update.Message.VideoNote.FileID)
138 bot.Send(vidnot)
139 }else if update.Message.Audio != nil{
140 audio := tgbotapi.NewAudioShare(update.Message.ReplyToMessage.ForwardFromChat.ID, update.Message.Audio.FileID)
141 bot.Send(audio)
142 }else if update.Message.Voice != nil{
143 voice := tgbotapi.NewVoiceShare(update.Message.ReplyToMessage.ForwardFromChat.ID, update.Message.Voice.FileID)
144 bot.Send(voice)
145 }else if update.Message.Text != ""{
146 msg := tgbotapi.NewMessage(update.Message.ReplyToMessage.ForwardFromChat.ID, "<b>" + update.Message.From.FirstName + "</b>: " + update.Message.Text)
147 msg.ParseMode = "HTML"
148 msg.DisableWebPagePreview = true
149 bot.Send(msg)
150 }
151 // }
152
153
154 }else if update.CallbackQuery != nil {//Callback Query
155 err:= db.QueryRow("SELECT status FROM data WHERE userID=?", update.CallbackQuery.Message.Chat.ID).Scan(&status)
156 if err != nil {
157 insert, err := db.Query("INSERT INTO data VALUES (?, 'home')", update.CallbackQuery.Message.Chat.ID)
158 if err != nil {
159 log.Printf("Utente non aggiunto")
160 panic(err.Error())
161 }
162 defer insert.Close()
163 }
164
165 msg := tgbotapi.NewEditMessageText(update.CallbackQuery.Message.Chat.ID, update.CallbackQuery.Message.MessageID, "")
166 switch update.CallbackQuery.Data {
167 case "chat":
168 updateq, err := db.Query("UPDATE data SET status='chat' WHERE userID=?", update.CallbackQuery.Message.Chat.ID)
169 if err != nil {
170 log.Printf("Utente non aggiornato :C")
171 panic(err.Error())
172 }
173 defer updateq.Close()
174 var ReplyMarkup = tgbotapi.NewInlineKeyboardMarkup(
175 tgbotapi.NewInlineKeyboardRow(
176 tgbotapi.NewInlineKeyboardButtonData("? Esci","esci"),
177 ),
178 )
179 msg1 := tgbotapi.NewEditMessageReplyMarkup(update.CallbackQuery.Message.Chat.ID, update.CallbackQuery.Message.MessageID, ReplyMarkup)
180 msg.DisableWebPagePreview = true
181 msg.ParseMode = "HTML"
182 msg.Text = "? Ok, ora sei in chat con <a href='https://t.me/asadashinosao'>Invy55</a>.\nUsa il pulsante sottostante o /start per uscire"
183 bot.Send(msg)
184 bot.Send(msg1)
185 case "esci":
186 updateq, err := db.Query("UPDATE data SET status='home' WHERE userID=?", update.CallbackQuery.Message.Chat.ID)
187 if err != nil {
188 log.Printf("Utente non aggiornato :C")
189 panic(err.Error())
190 }
191 defer updateq.Close()
192 del := tgbotapi.NewDeleteMessage(update.CallbackQuery.Message.Chat.ID, update.CallbackQuery.Message.MessageID)
193 msg := tgbotapi.NewMessage(update.CallbackQuery.Message.Chat.ID, "")
194 msg.ParseMode = "HTML"
195 msg.DisableWebPagePreview = true
196 msg.Text = "?? Ehy <i>" + update.CallbackQuery.Message.From.FirstName + "</i>, benvenuto nel <b>ChatBot</b> di <a href='https://t.me/asadashinosao'>Invy55</a> creato in <b>GO</b>.\n<i>Premi il bottone qui sotto per avviare la chat con lui.</i>"
197 msg.ReplyMarkup = tgbotapi.NewInlineKeyboardMarkup(
198 tgbotapi.NewInlineKeyboardRow(
199 tgbotapi.NewInlineKeyboardButtonData("? Chat","chat"),
200 ),
201 )
202 bot.Send(del)
203 bot.Send(msg)
204 }
205
206 }
207 //chatt
208
209
210 }
211}