refactor and add videos
This commit is contained in:
parent
4568ea3913
commit
2c44abde3c
10 changed files with 2818 additions and 173 deletions
90
internal/vk/vk.go
Normal file
90
internal/vk/vk.go
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
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)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue