Categorygithub.com/0xzer/messagix
repositorypackage
0.0.0-20240326075735-a833e92773b9
Repository: https://github.com/0xzer/messagix.git
Documentation: pkg.go.dev

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# README

Messagix

Messagix is a easy-to-use Go library for interacting with facebooks/metas lightspeed API.

  • Login
    • Email
    • Phone
  • Fetch contact information
  • Typing Notifications
  • Fetch Messages (with message history support!)
  • Send Messages
    • Videos
    • External Media
    • Images
    • Replies
    • Forwarding
    • Stickers/Decals
  • Send Reactions
    • Remove
    • Update
    • New
  • Appstate
    • Online
    • Offline

Installation

Use the package manager to install messagix.

go get github.com/0xzer/messagix

Simplistic Usage

package client_test

import (
	"log"
	"os"
	"testing"
	"github.com/0xzer/messagix"
	"github.com/0xzer/messagix/debug"
	"github.com/0xzer/messagix/types"
)

var cli *messagix.Client

func TestClient(t *testing.T) {
	cookies := types.NewCookiesFromString("")

	cli = messagix.NewClient(cookies, debug.NewLogger(), "")
	cli.SetEventHandler(evHandler)

	err := cli.Connect()
	if err != nil {
		log.Fatal(err)
	}

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

	// making sure the main program does not exit so that the socket can continue reading
	wait := make(chan struct{})
    <-wait
}

func evHandler(evt interface{}) {
	switch evtData := evt.(type) {
		case *messagix.Event_Ready:
			cli.Logger.Info().
			Any("connectionCode", evtData.ConnectionCode.ToString()).
			Any("isNewSession", evtData.IsNewSession).
			Any("total_messages", len(evtData.Messages)).
			Any("total_threads", len(evtData.Threads)).
			Any("total_contacts", len(evtData.Contacts)).
			Msg("Client is ready!")

			contacts, err := cli.Account.GetContacts(100)
			if err != nil {
				log.Fatalf("failed to get contacts: %e", err)
			}

			cli.Logger.Info().Any("data", contacts).Msg("Contacts Response")
		case *messagix.Event_PublishResponse:
			cli.Logger.Info().Any("evtData", evtData).Msg("Got new event!")
		case *messagix.Event_Error:
			cli.Logger.Err(evtData.Err).Msg("The library encountered an error")
			os.Exit(1)
		case *messagix.Event_SocketClosed:
			cli.Logger.Info().Any("code", evtData.Code).Any("text", evtData.Text).Msg("Socket was closed.")
			os.Exit(1)
		default:
			cli.Logger.Info().Any("data", evtData).Interface("type", evt).Msg("Got unknown event!")
	}
}

Login

package main

import (
	"log"
	"github.com/0xzer/messagix"
	"github.com/0xzer/messagix/debug"
)

func main() {
	cli := messagix.NewClient(nil, debug.NewLogger(), "")

	session, err := cli.Account.Login("[email protected]", "mypassword123")
	if err != nil {
		log.Fatal(err)
	}

	cli.SaveSession("session.json")
}