Простая асинхронная обёртка над закрытым API для фриланс биржи kwork.ru на языке Go
GoKwork - это Go-клиент для работы с API kwork.ru. Библиотека предоставляет удобный интерфейс для взаимодействия с платформой, включая:
- 🔐 Аутентификацию
- 💬 Работу с сообщениями и диалогами
- 📊 Получение информации о проектах и заказах
- 🤖 Создание ботов для автоматических ответов
- 🔌 WebSocket подключение для real-time событий
- 🌐 Поддержку прокси (SOCKS5/SOCKS4)
go get github.com/rtexty/gokworkpackage main
import (
"context"
"fmt"
"log"
"github.com/rtexty/gokwork/pkg/kwork"
)
func main() {
client, err := kwork.NewClient(kwork.Config{
Login: "login",
Password: "password",
})
if err != nil {
log.Fatal(err)
}
defer client.Close()
ctx := context.Background()
// Получение своего профиля
me, err := client.GetMe(ctx)
if err != nil {
log.Fatal(err)
}
fmt.Printf("My profile: %+v\n", me)
}package main
import (
"context"
"log"
"os"
"os/signal"
"syscall"
"github.com/rtexty/gokwork/pkg/kwork"
"github.com/rtexty/gokwork/pkg/kwork/types"
)
func main() {
bot, err := kwork.NewBot(kwork.Config{
Login: "login",
Password: "password",
})
if err != nil {
log.Fatal(err)
}
defer bot.Close()
// Обработчик для первого сообщения
bot.MessageHandler("", true, "", func(ctx context.Context, msg *types.Message) error {
text := "Здравствуйте, рад что вы обратились именно ко мне!"
return msg.AnswerSimulation(ctx, text)
})
// Обработчик для сообщений содержащих слово "бот"
bot.MessageHandler("", false, "бот", func(ctx context.Context, msg *types.Message) error {
text := "Вам нужен бот? Могу помочь!"
return msg.AnswerSimulation(ctx, text)
})
// Обработчик для точного совпадения "привет"
bot.MessageHandler("привет", false, "", func(ctx context.Context, msg *types.Message) error {
text := "И вам привет!"
return msg.AnswerSimulation(ctx, text)
})
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// Graceful shutdown
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
go func() {
<-sigChan
cancel()
}()
log.Println("Bot is running!")
if err := bot.Run(ctx); err != nil && err != context.Canceled {
log.Fatal(err)
}
}client, err := kwork.NewClient(kwork.Config{
Login: "login",
Password: "password",
PhoneLast: "0102", // Последние 4 цифры телефона (если требуется)
})client, err := kwork.NewClient(kwork.Config{
Login: "login",
Password: "password",
ProxyURL: "socks5://208.113.220.250:3420",
})// Получение профиля
me, err := client.GetMe(ctx)
user, err := client.GetUser(ctx, userID)
// Диалоги
dialogs, err := client.GetAllDialogs(ctx)
messages, err := client.GetDialogWithUser(ctx, "username")
// Сообщения
err = client.SendMessage(ctx, userID, "текст")
err = client.DeleteMessage(ctx, messageID)
err = client.SetTyping(ctx, recipientID)
// Проекты
categories, err := client.GetCategories(ctx)
projects, err := client.GetProjects(ctx, kwork.ProjectsParams{
CategoriesIDs: []int{11, 79},
PriceFrom: 1000,
PriceTo: 5000,
})
// Коннекты
connects, err := client.GetConnects(ctx)
// Заказы
workerOrders, err := client.GetWorkerOrders(ctx)
payerOrders, err := client.GetPayerOrders(ctx)
// Уведомления
notifications, err := client.GetNotifications(ctx)
// Статус
err = client.SetOffline(ctx)Бот поддерживает три типа обработчиков:
- OnStart - срабатывает только на первое сообщение в диалоге
bot.MessageHandler("", true, "", handlerFunc)- Text - точное совпадение текста
bot.MessageHandler("привет", false, "", handlerFunc)- TextContains - содержит указанное слово
bot.MessageHandler("", false, "бот", handlerFunc)// С симуляцией набора текста (реалистично)
err := msg.AnswerSimulation(ctx, "Ответ")
// Быстрый ответ без симуляции
err := msg.FastAnswer(ctx, "Ответ")GoKwork/
├── cmd/
│ └── examples/ # Примеры использования
│ ├── api_example.go
│ └── bot_example.go
├── pkg/
│ └── kwork/
│ ├── client.go # Основной API клиент
│ ├── bot.go # Бот с обработчиками
│ ├── websocket.go # WebSocket слушатель
│ ├── types/ # Модели данных
│ └── errors/ # Кастомные ошибки
├── go.mod
├── go.sum
└── README.md
Если получаете эту ошибку, используйте прокси:
client, err := kwork.NewClient(kwork.Config{
Login: "login",
Password: "password",
ProxyURL: "socks5://your-proxy:port",
})Если требуется подтверждение телефона:
client, err := kwork.NewClient(kwork.Config{
Login: "login",
Password: "password",
PhoneLast: "0102",
})Проект использует golangci-lint для проверки качества кода.
Установка:
brew install golangci-lintЗапуск:
# Проверка кода
golangci-lint run
# С автоисправлением
golangci-lint run --fixКонфигурация находится в .golangci.yml
github.com/gorilla/websocket- WebSocket клиентgolang.org/x/net/proxy- Поддержка SOCKS прокси
MIT
Портировано с Python версии pykwork
Если у вас есть предложения или вы нашли баги, создавайте issue или pull request!