90 lines
2.3 KiB
Go
90 lines
2.3 KiB
Go
package vk
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/SevereCloud/vksdk/v2/api"
|
|
"github.com/SevereCloud/vksdk/v2/events"
|
|
"github.com/SevereCloud/vksdk/v2/longpoll-bot"
|
|
)
|
|
|
|
type VK struct {
|
|
api *api.VK
|
|
lp *longpoll.LongPoll
|
|
}
|
|
|
|
func New(logger *slog.Logger, api_key string, video_links chan string) (*VK, error) {
|
|
const op = "vk.New"
|
|
|
|
vk := api.NewVK(api_key)
|
|
|
|
// get information about the group
|
|
group, err := vk.GroupsGetByID(nil)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot get group info: %s: %w", op, err)
|
|
}
|
|
|
|
// Initializing Long Poll
|
|
lp, err := longpoll.NewLongPoll(vk, group[0].ID)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%s: %w", op, err)
|
|
}
|
|
// New message event
|
|
lp.MessageNew(func(_ context.Context, obj events.MessageNewObject) {
|
|
logger.Info("Message", "peer", obj.Message.PeerID, "text", obj.Message.Text)
|
|
for _, obj := range obj.Message.Attachments {
|
|
objectsw:
|
|
switch obj.Type {
|
|
case "story":
|
|
// fmt.Printf("Story %+v\n", obj.Story.Video.Files)
|
|
// get video link from struct
|
|
var videolink string
|
|
switch {
|
|
case obj.Story.Video.Files.Mp4_720 != "":
|
|
videolink = obj.Story.Video.Files.Mp4_720
|
|
case obj.Story.Video.Files.Mp4_480 != "":
|
|
videolink = obj.Story.Video.Files.Mp4_480
|
|
case obj.Story.Video.Files.Mp4_360 != "":
|
|
videolink = obj.Story.Video.Files.Mp4_360
|
|
case obj.Story.Video.Files.Mp4_240 != "":
|
|
videolink = obj.Story.Video.Files.Mp4_240
|
|
default:
|
|
logger.Error("cannot find video link")
|
|
break objectsw
|
|
}
|
|
// fmt.Println("Story:", videolink)
|
|
if err != nil {
|
|
logger.Error("vk error", "err", err)
|
|
}
|
|
// send video to tg
|
|
video_links <- videolink
|
|
case "video":
|
|
// logger.Info("Video", "owner", obj.Video.OwnerID, "id", obj.Video.ID)
|
|
owner := obj.Video.OwnerID
|
|
video_id := obj.Video.ID
|
|
videolink, err := fetchVideoURL(owner, video_id)
|
|
if err != nil {
|
|
logger.Error("cannot get video link", "err", err)
|
|
}
|
|
video_links <- videolink
|
|
default:
|
|
logger.Debug("Message type not found", "type", obj.Type, "obj", fmt.Sprintf("%+v", obj))
|
|
}
|
|
}
|
|
})
|
|
|
|
return &VK{
|
|
api: vk,
|
|
lp: lp,
|
|
}, nil
|
|
}
|
|
|
|
// Run starts message listening.
|
|
func (vk *VK) MustRun() {
|
|
// Run Bots Long Poll
|
|
if err := vk.lp.Run(); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|