Answer the question
In order to leave comments, you need to log in
Problem with sending message, how to solve?
There is a code, its essence is sending complaints from the forum, everything works, but not quite, I need to send existing reports in one message, when I use bytes / string to merge text, it either does not work, or as in the current version of the code sends them all the same in turn.
var report Report
type Report struct {
Report_id int
Content_type string
Report_state string
Is_send_vk int
}
func main() {
token := "2060761b6eb0fc2e877e04d2ac4bb64adca7291df75d3234c6d6ed9aa925fadbef096678d0f5fe380fb7a" // use os.Getenv("TOKEN")
vk := api.NewVK(token)
// get information about the group
group, err := vk.GroupsGetByID(nil)
if err != nil {
log.Fatal(err)
}
// Initializing Long Poll
lp, err := longpoll.NewLongPoll(vk, group[0].ID)
if err != nil {
log.Fatal(err)
}
db, err := sql.Open("mysql", "cd47468_test:[email protected](92.53.96.174:3306)/cd47468_test")
if err != nil {
panic(err)
}
defer db.Close()
res, err := db.Query("SELECT `report_id`, `content_type` FROM `xf_report` WHERE `report_state` = 'open'")
if err != nil {
panic(err)
}
//spew.Dump(res)
lp.MessageNew(func(_ context.Context, obj events.MessageNewObject) {
if obj.Message.Text == "/dump" {
for res.Next(){
err := res.Scan(&report.Report_id, &report.Content_type)
if err != nil {
panic(err)
}
// messages := []string{"New Report:\r\nId - " + strconv.Itoa(report.Report_id) + " || Type - " + report.Content_type + "\r\nLink - http://cd47468.tmweb.ru/index.php?reports/" + strconv.Itoa(report.Report_id) + "/"}
var str strings.Builder
for i := 0; i < 1; i++ {
str.WriteString("New Report:\r\nId - " + strconv.Itoa(report.Report_id) + " || Type - " + report.Content_type + "\r\nLink - http://cd47468.tmweb.ru/index.php?reports/" + strconv.Itoa(report.Report_id) + "/")
}
//log.Println(str.String())
send, err2 := vk.MessagesSend(api.Params{
"peer_id": 2000000001,
"random_id": 0,
"message": str.String(),
})
if err2 != nil {
log.Fatal(err2)
}
spew.Dump(send)
}
}
})
// Run Bots Long Poll
log.Println("Start Long Poll")
if err := lp.Run(); err != nil {
log.Fatal(err)
}
}
New Report:
Id - 12 || Type - post
Link - http://cd47468.tmweb.ru/index.php?reports/12/New Report:
Id - 12 || Type - post
Link - http://cd47468.tmweb.ru/index.php?reports/12/New Report:
New Report:
Id - 13 || Type - profile_post
Link - http://cd47468.tmweb.ru/index.php?reports/13/New Report:
Id - 13 || Type - profile_post
Link - http://cd47468.tmweb.ru/index.php?reports/13/
и т.д.
New Report:
Id - 1 || Type - profile_post
Link - http://cd47468.tmweb.ru/index.php?reports/1/
Id - 2 || Type - profile_post
Link - http://cd47468.tmweb.ru/index.php?reports/2/
и т.д.
Answer the question
In order to leave comments, you need to log in
Предполагаю вам нужно запрос в базу переместить в MessageNew.
Т.е. алгоритм должен быть таким:
- вы получили запрос /dump
- сделали запрос в базу
- в цикле извлекли данные и записали их в Buffer
- одним сообщением ответили данными из Buffer
Например так:
lp.MessageNew(func(_ context.Context, obj events.MessageNewObject) {
// тут приходит новый запрос
if obj.Message.Text == "/dump" {
var str strings.Builder
// читаете данные из базы
res, err := db.Query("SELECT `report_id`, `content_type` FROM `xf_report` WHERE `report_state` = 'open'")
// по одном их обрабатываете и записываете в strings.Builder
for res.Next(){
err := res.Scan(&report.Report_id, &report.Content_type)
str.WriteString(...)
}
// тут у вас все данные собраны в str
// отправляете данные в ответ
send, err2 := vk.MessagesSend(api.Params{
"peer_id": 2000000001,
"random_id": 0,
"message": str.String(),
})
}
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question