twitter-bot

command module
v0.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2022 License: MIT Imports: 9 Imported by: 0

README

twitter-bot is a framework to get you started with implementing a twitter webhook based bot in a quick and easy way.

Apply for twitter developer account

- Navigate to https://developer.twitter.com/, and ensure you are logged in.
- Once you are logged in, click on 'Apply' at the right-top corner of the screen
- Make sure you read and agree to conditions here: Restricted usecases
- Click on 'Apply for a developer acocunt'
- Select your use case. we will select bot
- Review and complete your details

Note that email-address and phone-number are mandatory for registring the developer account.

- Tell us about bot
- Review the information you provided
- review the agreement and click submit.
- If approved, you will get email for the same

create a new app

- Create a new app: https://developer.twitter.com/en/apps/create
- Review terms and conditions
- Once created, navigate to Permissions tab and make sure you select the right permissions needed for your bot.
- Now navigate back to Keys/Tokens and create access token and access token secret. Save them in a safe place, we will need them again.

setup new environment

- Now we need to create environment. Navigate to https://developer.twitter.com/en/account/environments.

For the webhook bot, you should select 'Account Activity API/Sandbox'

- Now enter 'Dev environment label'. e.g. 'dev' or 'prod' and select the app we just created from the dropdown
- Click complete setup and you are all set to start writing code

OK, finally writing the code now

create new bot object
const (
	webhookHost     = "https://your-webhook-domain"
	webhookPath     = "/webhook/twitter"
	//has to be same as provided when getting tokens from twitter developers console
	environmentName = "prod" 
)

// use the tokens saved when following above steps
bot, err := twitter.NewBot(
		&twitter.BotConfig{
			Tokens: twitter.Tokens{
				ConsumerKey:   "<consumer-key>",
				ConsumerToken: "<consumer-token>",
				Token:         "<token>",
				TokenSecret:   "<token-secret>",
			},
			Environment:          environmentName,
			WebhookHost:          webhookHost,
			WebhookPath:          webhookPath,
			OverrideRegistration: true,
		},
	)
	if err != nil {
		logrus.Fatal(err)
	}

create a handler for the events you will receive from twitter

type webhookHandler struct{}

// This handler will handle the events from twitter. You can print it to console, forward it to yourself, 
// reply using twitter api. possibilities are endless.
func (wh webhookHandler) handler(w http.ResponseWriter, r *http.Request) {
	webhookBody, _ := httputil.DumpRequest(r, true)
	logrus.Info(string(x))
}

start a webserver to handle the webhook event from twitter.

notice that for GET method, you need to add bot.HandleCRCResponse as handler. This is required for webhook to remain active

	wh := webhookHandler{}
	http.HandleFunc(webhookPath, func(w http.ResponseWriter, r *http.Request) {
		switch r.Method {
		case http.MethodGet:
			bot.HandleCRCResponse(w, r)
		case http.MethodPost:
			wh.handler(w, r)
		}
	})

	go func() {
		fmt.Println(http.ListenAndServe(":8080", nil))
	}()

finally trigger the registration and subscription of the webhook. Only after this is when you will start receiving actual webhook events
	// give time for http server to start and be ready
	// server needs to be up before we do registration and subscription
	// so that we can respond to CRC request
	time.Sleep(3)

	err = bot.DoRegistrationAndSubscribeBusiness()
	if err != nil {
		logrus.Fatal(err)
	}

Look at main.go for complete example

Contributing

Found an issue in documentation or code, please report issue

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
examples module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL