
Security News
RubyGems Adds Cooldown Feature to Bundler for Newly Published Gems
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.
Небольшой модуль для обработки команд в ботах VK.
Работает на базе VK SDK.
go get txts.su/vkc@latest
package main
import (
"log"
"strconv"
"txts.su/vkc"
"github.com/SevereCloud/vksdk/v3/api"
"github.com/SevereCloud/vksdk/v3/longpoll-bot"
)
// Структура для хранения зависимостей, которые прокидываются в обработчики команд из основной функции
type MyDependencies struct {
MyStore map[string]any
AllHandlers *[]*vkc.CommandHandler[MyDependencies]
}
// Простая проверка на права. Понятно, для чего может быть полезным.
var AdminPermChecker = vkc.HandlerAccessCheck[MyDependencies]{
Checker: func(handler *vkc.CommandHandler[MyDependencies], ctx vkc.CommandContext[MyDependencies]) bool {
return ctx.Message.FromID == 1
},
}
// Обработчик, реагирующий на !hello и !hi
var HandleHello = vkc.CommandHandler[MyDependencies]{
Pattern: vkc.ListOf([]string{"hello", "hi"}),
Executor: func(ctx vkc.CommandContext[MyDependencies]) error {
if ctx.Dependency.MyStore[strconv.Itoa(ctx.Message.FromID)] == "banned" {
return ctx.SendText("Вы забанены и не можете использовать эту команду.")
}
return ctx.SendText("Hello, world!")
},
}
// Обработчик, реагирующий на !ban. Из-за проверки работает только с аккаунтом Дурова.
var HandleBan = vkc.CommandHandler[MyDependencies]{
Pattern: vkc.Text("ban"),
AccessCheck: &AdminPermChecker,
Executor: func(ctx vkc.CommandContext[MyDependencies]) error {
if len(ctx.Arguments) == 0 {
return ctx.SendText("Использование: !ban <айди>")
}
/* "баним" пользователя... */
ctx.Dependency.MyStore[ctx.Arguments[0]] = "banned"
return ctx.SendText("Пользователь %d забанен!", ctx.Arguments[0])
},
}
func main() {
// Инициализация команд
handlers := vkc.Commands[MyDependencies]{
Prefix: vkc.PrefixText("!"),
Handlers: &[]*vkc.CommandHandler[MyDependencies]{&HandleHello, &HandleBan},
// тут также доступно несколько обработчиков для событий, например, OnMessage, OnCommandError и т.д.
}
handlers.Dependencies = MyDependencies{
MyStore: make(map[string]any),
AllHandlers: handlers.Handlers,
}
vk := api.NewVK( /* Ваш токен */ )
lp, err := longpoll.NewLongPollCommunity(vk)
if err != nil {
log.Fatal(err)
}
// Настраиваем перехват сообщений
err = handlers.AttachToLongPoll(vk, lp)
if err != nil {
log.Fatal(err)
}
log.Printf("Start Long Poll\n")
if err := lp.Run(); err != nil {
log.Fatal(err)
}
}
FAQs
Unknown package
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
RubyGems and Bundler 4.0.13 introduced an opt-in cooldown feature that delays newly published gems during dependency resolution.

Security News
pnpm 11.5 now recognizes npm staged publish approvals in release metadata, preventing those releases from being mistaken for lower-trust package publishes.

Security News
Federal audit finds NIST lacked a plan to clear the NVD backlog, wasted funds on duplicate work, and delayed use of CISA data.