Snapper

Snapper is a lightweight, easy-to-use Go library for interacting with Snapchat's Web API.

Installation

Use the package manager to install snapper.

go get github.com/0xzer/snapper

Features

Usage

package main

import (
	"encoding/json"
	"log"
        "github.com/rs/zerolog"
	"github.com/0xzer/snapper"
	"github.com/0xzer/snapper/protos"
)

var cli *snapper.Client

func main() {
        cookieStr := "sc-cookies-accepted=; EssentialSession=; Preferences=; Performance=; Marketing=; __Host-X-Snap-Client-Cookie=; __Host-sc-a-session=; sc-a-nonce=; __Host-sc-a-nonce=;sc-a-csrf=; blizzard_client_id="
	sess, err := snapper.NewSessionFromCookies(cookieStr) // or snapper.NewSessionFromFile("session.json")
	if err != nil {
		log.Fatal(err)
	}

	cli = snapper.NewClient(sess, zerolog.Logger{}, nil)

	sendChatMessage()

	err = cli.SaveSession("session.json")
	if err != nil {
		log.Fatal(err)
	}
}

func sendChatMessage() {
	conversations := getExampleConversations()
	firstConversation := conversations[0]

	messageBuilder := cli.NewCreateMessageBuilder().
	AddConversationDestination(firstConversation).
	SetTextMessage("hello!").
	SetSavePolicy(protos.ContentEnvelope_SavePolicy_LIFETIME)
	
	sent, err := cli.Messaging.SendContentMessage(messageBuilder)
	if err != nil {
		log.Fatal(err)
	}

	log.Println(sent)
}

func getExampleConversations() []*protos.Conversation {
	conversationEntries, err := cli.Messaging.SyncConversations(nil, nil)
	if err != nil {
		log.Fatal(err)
	}

	conversationsBatch := cli.Messaging.BatchRequestFromEntry(conversationEntries.GetConversations())
	batchDeltaSync, err := cli.Messaging.BatchDeltaSync(conversationsBatch)
	if err != nil {
		log.Fatal(err)
	}

	return cli.Messaging.BatchResponseToConversationSlice(batchDeltaSync)
}