Skip to content

rajatjindal/twitter-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

- 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

About

basic framework to implement twitter webhook based bot

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages