@@ -17,7 +17,8 @@ import (
17
17
"strings"
18
18
"time"
19
19
20
- "github.com/SevereCloud/vksdk/v2/api"
20
+ "github.com/SevereCloud/vksdk/v3/api"
21
+ "github.com/SevereCloud/vksdk/v3/object"
21
22
"github.com/joho/godotenv"
22
23
)
23
24
@@ -27,7 +28,6 @@ var vk_access_token string
27
28
var vk_api_version string
28
29
var vk_owner_id string
29
30
var vk_post_last int
30
- var vk_post_requested_ID int
31
31
32
32
var telegram_bot_token string
33
33
var telegram_temp_chat_id string
@@ -67,16 +67,32 @@ type telegram_audio_params struct {
67
67
Parse_mode string `json:"parse_mode"`
68
68
}
69
69
70
- func Request () {
70
+ func VK_to_TG (post object.WallWallpost ) {
71
+ vk_post_requested_ID := post .ID
72
+ vk_post_requested := post
73
+
74
+ if vk_post_last == 1 {
75
+ vk_post_last = vk_post_requested_ID
76
+ log .Print ("[INFO] First request.\n " )
77
+ } else if vk_post_last != vk_post_requested_ID {
78
+ vk_post_last = vk_post_requested_ID
79
+ log .Printf ("[INFO] New post vk.com/wall%v_%v\n " , vk_post_requested .OwnerID , vk_post_requested .ID )
80
+ PostMessage (vk_post_requested )
81
+ if vk_post_requested .CopyHistory != nil {
82
+ PostMessage (vk_post_requested .CopyHistory [0 ])
83
+ }
84
+ }
85
+ }
86
+
87
+ func Request_VK () {
71
88
var vk_response api.WallGetResponse
72
- var vk_response_repost api.WallGetResponse
73
89
74
90
vk := api .NewVK (vk_access_token )
75
91
76
92
params := api.Params {
77
93
"access_token" : vk_access_token ,
78
94
"owner_id" : vk_owner_id ,
79
- "count" : 1 ,
95
+ "count" : 2 ,
80
96
"offset" : 0 ,
81
97
"filter" : "all" ,
82
98
"v" : vk_api_version ,
@@ -89,51 +105,9 @@ func Request() {
89
105
90
106
vk_is_pinned_check := vk_response .Items [0 ].IsPinned
91
107
if vk_is_pinned_check {
92
- params := api.Params {
93
- "access_token" : vk_access_token ,
94
- "owner_id" : vk_owner_id ,
95
- "count" : 1 ,
96
- "offset" : 1 ,
97
- "filter" : "all" ,
98
- "v" : vk_api_version ,
99
- }
100
-
101
- err := vk .RequestUnmarshal ("wall.get" , & vk_response , params )
102
- if err != nil {
103
- log .Fatalf ("[ERROR] %v" , err )
104
- }
105
-
106
- vk_post_requested_ID = vk_response .Items [0 ].ID
107
- vk_post_requested := vk_response .Items [0 ]
108
-
109
- if vk_post_last == 1 {
110
- vk_post_last = vk_post_requested_ID
111
- log .Print ("[INFO] First request.\n " )
112
- } else if vk_post_last != vk_post_requested_ID {
113
- vk_post_last = vk_post_requested_ID
114
- log .Printf ("[INFO] New post vk.com/wall%v_%v\n " , vk_post_requested .OwnerID , vk_post_requested .ID )
115
- PostMessage (vk_response )
116
- if vk_post_requested .CopyHistory != nil {
117
- vk_response_repost .Items = vk_post_requested .CopyHistory
118
- PostMessage (vk_response_repost )
119
- }
120
- }
121
- }
122
-
123
- vk_post_requested_ID = vk_response .Items [0 ].ID
124
- vk_post_requested := vk_response .Items [0 ]
125
-
126
- if vk_post_last == 1 {
127
- vk_post_last = vk_post_requested_ID
128
- log .Print ("[INFO] First request.\n " )
129
- } else if vk_post_last != vk_post_requested_ID {
130
- vk_post_last = vk_post_requested_ID
131
- log .Printf ("[INFO] New post vk.com/wall%v_%v\n " , vk_post_requested .OwnerID , vk_post_requested .ID )
132
- PostMessage (vk_response )
133
- if vk_post_requested .CopyHistory != nil {
134
- vk_response_repost .Items = vk_post_requested .CopyHistory
135
- PostMessage (vk_response_repost )
136
- }
108
+ VK_to_TG (vk_response .Items [1 ])
109
+ } else {
110
+ VK_to_TG (vk_response .Items [0 ])
137
111
}
138
112
}
139
113
@@ -277,38 +251,38 @@ func GetVideoURL(owner_id int, vid int) string {
277
251
_ , err = io .Copy (out , res .Body )
278
252
_ , err = os .Open (fmt .Sprintf ("/video/%d_%d.mp4" , oid , id ))
279
253
if err != nil {
280
- log .Fatalf ("[ERROR %v] " , err )
254
+ log .Fatalf ("[ERROR] %v" , err )
281
255
}
282
256
form := new (bytes.Buffer )
283
257
writer := multipart .NewWriter (form )
284
258
fw , err := writer .CreateFormFile ("video" , fmt .Sprintf ("%d_%d.mp4" , oid , id ))
285
259
if err != nil {
286
- log .Fatalf ("[ERROR %v] " , err )
260
+ log .Fatalf ("[ERROR] %v" , err )
287
261
}
288
262
fd , err := os .Open (fmt .Sprintf ("/video/%d_%d.mp4" , oid , id ))
289
263
if err != nil {
290
- log .Fatalf ("[ERROR %v] " , err )
264
+ log .Fatalf ("[ERROR] %v" , err )
291
265
}
292
266
defer fd .Close ()
293
267
_ , err = io .Copy (fw , fd )
294
268
if err != nil {
295
- log .Fatalf ("[ERROR %v] " , err )
269
+ log .Fatalf ("[ERROR] %v" , err )
296
270
}
297
271
formField , err := writer .CreateFormField ("chat_id" )
298
272
if err != nil {
299
- log .Fatalf ("[ERROR %v] " , err )
273
+ log .Fatalf ("[ERROR] %v" , err )
300
274
}
301
275
_ , err = formField .Write ([]byte (telegram_temp_chat_id ))
302
276
writer .Close ()
303
277
client = http.Client {}
304
278
req , err = http .NewRequest ("POST" , telegram_api_send_video , form )
305
279
if err != nil {
306
- log .Fatalf ("[ERROR %v] " , err )
280
+ log .Fatalf ("[ERROR] %v" , err )
307
281
}
308
282
req .Header .Set ("Content-Type" , writer .FormDataContentType ())
309
283
resp , err := client .Do (req )
310
284
if err != nil {
311
- log .Fatalf ("[ERROR %v] " , err )
285
+ log .Fatalf ("[ERROR] %v" , err )
312
286
}
313
287
defer resp .Body .Close ()
314
288
data_vid := make (map [string ]interface {})
@@ -329,7 +303,7 @@ func NoAttachPrepare(text string, tg_src string) {
329
303
telegram_api_text .Chat_id = telegram_chat_id
330
304
tmp_json , err := json .Marshal (telegram_api_text )
331
305
if err != nil {
332
- log .Fatalf ("[ERROR %v] " , err )
306
+ log .Fatalf ("[ERROR] %v" , err )
333
307
}
334
308
SendToTelegramNoAttach (tmp_json )
335
309
}
@@ -340,7 +314,7 @@ func SendToTelegramNoAttach(post_data []byte) {
340
314
client := & http.Client {}
341
315
resp , err := client .Do (req )
342
316
if err != nil {
343
- log .Fatalf ("[ERROR %v] " , err )
317
+ log .Fatalf ("[ERROR] %v" , err )
344
318
}
345
319
defer resp .Body .Close ()
346
320
if resp .StatusCode != http .StatusOK {
@@ -356,7 +330,7 @@ func SendToTelegram(post_data []byte) {
356
330
client := & http.Client {}
357
331
resp , err := client .Do (req )
358
332
if err != nil {
359
- log .Fatalf ("[ERROR %v] " , err )
333
+ log .Fatalf ("[ERROR] %v" , err )
360
334
}
361
335
defer resp .Body .Close ()
362
336
if resp .StatusCode != http .StatusOK {
@@ -386,31 +360,31 @@ func DeleteEmptyMedia(s []telegram_photo_params) []telegram_photo_params {
386
360
return r
387
361
}
388
362
389
- func PostMessage (post_response api. WallGetResponse ) {
390
- if len (post_response . Items [ 0 ]. Attachments ) > 0 {
391
- telegram_api_photos := make ([]telegram_photo_params , len (post_response . Items [ 0 ] .Attachments ))
392
- telegram_api_audio_params := make ([]telegram_audio_params , len (post_response . Items [ 0 ] .Attachments ))
393
- for i := range post_response . Items [ 0 ] .Attachments {
394
- if post_response . Items [ 0 ] .Attachments [i ].Type == "photo" {
363
+ func PostMessage (post_vk object. WallWallpost ) {
364
+ if len (post_vk . Attachments ) != 0 {
365
+ telegram_api_photos := make ([]telegram_photo_params , len (post_vk .Attachments ))
366
+ telegram_api_audio_params := make ([]telegram_audio_params , len (post_vk .Attachments ))
367
+ for i := range post_vk .Attachments {
368
+ if post_vk .Attachments [i ].Type == "photo" {
395
369
telegram_api_photos [i ].Type_photo = "photo"
396
- telegram_api_photos [i ].Media = post_response . Items [ 0 ] .Attachments [i ].Photo .MaxSize ().URL
397
- } else if post_response . Items [ 0 ]. Attachments [i ].Type == "doc" && post_response . Items [ 0 ] .Attachments [i ].Doc .Ext == "gif" {
370
+ telegram_api_photos [i ].Media = post_vk .Attachments [i ].Photo .MaxSize ().URL
371
+ } else if post_vk . Attachments [i ].Type == "doc" && post_vk .Attachments [i ].Doc .Ext == "gif" {
398
372
telegram_api_photos [i ].Type_photo = "video"
399
- telegram_api_photos [i ].Media = fmt .Sprintf ("%v" , GetGifURL (post_response . Items [ 0 ] .Attachments [i ].Doc .Preview .Video .Src ))
400
- } else if post_response . Items [ 0 ] .Attachments [i ].Type == "video" {
373
+ telegram_api_photos [i ].Media = fmt .Sprintf ("%v" , GetGifURL (post_vk .Attachments [i ].Doc .Preview .Video .Src ))
374
+ } else if post_vk .Attachments [i ].Type == "video" {
401
375
telegram_api_photos [i ].Type_photo = "video"
402
- telegram_api_photos [i ].Media = fmt .Sprintf ("%v" , GetVideoURL (post_response . Items [ 0 ]. Attachments [i ].Video .OwnerID , post_response . Items [ 0 ] .Attachments [i ].Video .ID ))
403
- } else if post_response . Items [ 0 ] .Attachments [i ].Type == "audio" {
376
+ telegram_api_photos [i ].Media = fmt .Sprintf ("%v" , GetVideoURL (post_vk . Attachments [i ].Video .OwnerID , post_vk .Attachments [i ].Video .ID ))
377
+ } else if post_vk .Attachments [i ].Type == "audio" {
404
378
telegram_api_audio_params [i ].Type_audio = "audio"
405
- telegram_api_audio_params [i ].Media = GetAudioURL (fmt .Sprintf ("%v" , post_response . Items [ 0 ]. Attachments [i ].Audio .OwnerID ), fmt .Sprintf ("%v" , post_response . Items [ 0 ] .Attachments [i ].Audio .ID ))
379
+ telegram_api_audio_params [i ].Media = GetAudioURL (fmt .Sprintf ("%v" , post_vk . Attachments [i ].Audio .OwnerID ), fmt .Sprintf ("%v" , post_vk .Attachments [i ].Audio .ID ))
406
380
}
407
381
}
408
382
var telegram_source_link string
409
383
if telegram_source_required == "true" {
410
- if post_response . Items [ 0 ] .Copyright .Link != "" {
411
- telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a><b> | </b><a href=\" %s\" ><b>Ссылка на источник</b></a>" , post_response . Items [ 0 ]. OwnerID , post_response . Items [ 0 ]. ID , post_response . Items [ 0 ] .Copyright .Link )
384
+ if post_vk .Copyright .Link != "" {
385
+ telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a><b> | </b><a href=\" %s\" ><b>Ссылка на источник</b></a>" , post_vk . OwnerID , post_vk . ID , post_vk .Copyright .Link )
412
386
} else {
413
- telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a>" , post_response . Items [ 0 ]. OwnerID , post_response . Items [ 0 ] .ID )
387
+ telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a>" , post_vk . OwnerID , post_vk .ID )
414
388
}
415
389
}
416
390
telegram_api_media := telegram_api_params {}
@@ -421,66 +395,66 @@ func PostMessage(post_response api.WallGetResponse) {
421
395
telegram_api_audio_params = DeleteEmptyAudio (telegram_api_audio_params )
422
396
if len (telegram_api_photos ) == 0 && len (telegram_api_audio_params ) == 0 {
423
397
log .Print ("Poll or something else in post, maybe add them?" )
424
- NoAttachPrepare (post_response . Items [ 0 ] .Text , telegram_source_link )
398
+ NoAttachPrepare (post_vk .Text , telegram_source_link )
425
399
} else if len (telegram_api_photos ) != 0 && len (telegram_api_audio_params ) == 0 {
426
400
telegram_api_photos [0 ].Parse_mode = "html"
427
- if post_response . Items [ 0 ]. Attachments [0 ].Type == "video" && post_response . Items [ 0 ] .Attachments [0 ].Video .Type == "short_video" {
428
- telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_response . Items [ 0 ] .Attachments [0 ].Video .Description , telegram_source_link )
401
+ if post_vk . Attachments [0 ].Type == "video" && post_vk .Attachments [0 ].Video .Type == "short_video" {
402
+ telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_vk .Attachments [0 ].Video .Description , telegram_source_link )
429
403
} else {
430
- telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_response . Items [ 0 ] .Text , telegram_source_link )
404
+ telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_vk .Text , telegram_source_link )
431
405
}
432
406
telegram_api_media .Media = telegram_api_photos
433
407
tmp_json , err := json .Marshal (telegram_api_media )
434
408
if err != nil {
435
- log .Fatalf ("[ERROR %v] " , err )
409
+ log .Fatalf ("[ERROR] %v" , err )
436
410
}
437
411
SendToTelegram (tmp_json )
438
412
} else if len (telegram_api_photos ) == 0 && len (telegram_api_audio_params ) != 0 {
439
413
telegram_api_audio_params [0 ].Parse_mode = "html"
440
- telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_response . Items [ 0 ] .Text , telegram_source_link )
414
+ telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_vk .Text , telegram_source_link )
441
415
telegram_api_audio .Media = telegram_api_audio_params
442
416
tmp_json , err := json .Marshal (telegram_api_audio )
443
417
if err != nil {
444
- log .Fatalf ("[ERROR %v] " , err )
418
+ log .Fatalf ("[ERROR] %v" , err )
445
419
}
446
420
SendToTelegram (tmp_json )
447
421
} else if len (telegram_api_photos ) != 0 && len (telegram_api_audio_params ) != 0 {
448
422
telegram_api_photos [0 ].Parse_mode = "html"
449
- telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_response . Items [ 0 ] .Text , telegram_source_link )
423
+ telegram_api_photos [0 ].Caption = fmt .Sprintf ("%s%s" , post_vk .Text , telegram_source_link )
450
424
telegram_api_media .Media = telegram_api_photos
451
425
tmp_json , err := json .Marshal (telegram_api_media )
452
426
if err != nil {
453
- log .Fatalf ("[ERROR %v] " , err )
427
+ log .Fatalf ("[ERROR] %v" , err )
454
428
}
455
429
SendToTelegram (tmp_json )
456
430
telegram_api_audio_params [0 ].Parse_mode = "html"
457
- telegram_api_audio_params [0 ].Caption = fmt .Sprintf ("<b>Пидорасня не дает сделать в одном посте, поэтому отдельно</b> " )
431
+ telegram_api_audio_params [0 ].Caption = fmt .Sprintf ("" )
458
432
telegram_api_audio .Media = telegram_api_audio_params
459
433
tmp_json_aud , err := json .Marshal (telegram_api_audio )
460
434
if err != nil {
461
- log .Fatalf ("[ERROR %v] " , err )
435
+ log .Fatalf ("[ERROR] %v" , err )
462
436
}
463
437
SendToTelegram (tmp_json_aud )
464
438
}
465
439
} else {
466
440
var telegram_source_link string
467
441
if telegram_source_required == "true" {
468
- if post_response . Items [ 0 ] .Copyright .Link != "" {
469
- telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a><b> | </b><a href=\" %s\" ><b>Ссылка на источник</b></a>" , post_response . Items [ 0 ]. OwnerID , post_response . Items [ 0 ]. ID , post_response . Items [ 0 ] .Copyright .Link )
442
+ if post_vk .Copyright .Link != "" {
443
+ telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a><b> | </b><a href=\" %s\" ><b>Ссылка на источник</b></a>" , post_vk . OwnerID , post_vk . ID , post_vk .Copyright .Link )
470
444
} else {
471
- telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a>" , post_response . Items [ 0 ]. OwnerID , post_response . Items [ 0 ] .ID )
445
+ telegram_source_link = fmt .Sprintf ("\n \n <a href=\" https://vk.com/wall%d_%d\" ><b>Ссылка на пост</b></a>" , post_vk . OwnerID , post_vk .ID )
472
446
}
473
447
}
474
448
log .Print ("Post has no media, post caption only\n " )
475
- NoAttachPrepare (post_response . Items [ 0 ] .Text , telegram_source_link )
449
+ NoAttachPrepare (post_vk .Text , telegram_source_link )
476
450
}
477
451
}
478
452
479
453
func Poll () {
480
454
r := rand .New (rand .NewSource (99 ))
481
455
c := time .Tick (10 * time .Second )
482
456
for range c {
483
- Request ()
457
+ Request_VK ()
484
458
jitter := time .Duration (r .Int31n (5000 )) * time .Millisecond
485
459
time .Sleep (jitter )
486
460
}
0 commit comments