Skip to content

Instantly share code, notes, and snippets.

@nnao45
Created May 12, 2019 13:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nnao45/6356e9c411aaa2eee699a17a10a7bf5f to your computer and use it in GitHub Desktop.
Save nnao45/6356e9c411aaa2eee699a17a10a7bf5f to your computer and use it in GitHub Desktop.
fn main() {
const TRACK: &str = "@NAME_OF_YOUR_ACCOUNT";
// `credential.json` must have the following form:
// {"consumer_key": "...", "consumer_secret": "...", "access_key": "...", "access_secret": "..."}
let mut credential_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
credential_path.pop();
credential_path.push("credential.json");
let credential = File::open(credential_path).unwrap();
let token: Token = json::from_reader(credential).unwrap();
let stream = TwitterStreamBuilder::filter(token.borrowed())
.track(Some(TRACK))
.listen()
.unwrap()
.flatten_stream();
let rest = tweetust::TwitterClient::new(
token,
tweetust::DefaultHttpHandler::with_https_connector().unwrap(),
);
// Information of the authenticated user:
let user = rest
.account()
.verify_credentials()
.execute()
.unwrap()
.object;
let bot = stream
.for_each(move |json| {
if let Ok(StreamMessage::Tweet(tweet)) = json::from_str(&json) {
if tweet.user.id != user.id
&& tweet
.entities
.user_mentions
.iter()
.any(|mention| mention.id == user.id)
{
println!(
"On {}, @{} tweeted: {:?}",
tweet.created_at, tweet.user.screen_name, tweet.text
);
let response = format!("@{} {}", tweet.user.screen_name, tweet.text);
rest.statuses()
.update(response)
.in_reply_to_status_id(tweet.id)
.execute()
.map_err(Error::custom)?;
}
}
Ok(())
})
.map_err(|e| println!("error: {}", e));
rt::run(bot);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment