From eb8c9f975f0105f7df40b45090f7b2c46f3ddcd3 Mon Sep 17 00:00:00 2001 From: Kelly Rauchenberger Date: Sat, 11 Feb 2017 20:01:21 -0500 Subject: Created bot --- fefisms.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 fefisms.cpp (limited to 'fefisms.cpp') diff --git a/fefisms.cpp b/fefisms.cpp new file mode 100644 index 0000000..44e69b4 --- /dev/null +++ b/fefisms.cpp @@ -0,0 +1,103 @@ +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + std::random_device random_device; + std::mt19937 random_engine{random_device()}; + + if (argc != 2) + { + std::cout << "usage: fefisms [configfile]" << std::endl; + return -1; + } + + std::string configfile(argv[1]); + YAML::Node config = YAML::LoadFile(configfile); + + twitter::auth auth; + auth.setConsumerKey(config["consumer_key"].as()); + auth.setConsumerSecret(config["consumer_secret"].as()); + auth.setAccessKey(config["access_key"].as()); + auth.setAccessSecret(config["access_secret"].as()); + + twitter::client client(auth); + + verbly::database database(config["verbly_datafile"].as()); + + verbly::filter formFilter = + (verbly::form::complexity == 1) + && (verbly::form::proper == false); + + verbly::filter cleanFilter = + !(verbly::word::usageDomains %= (verbly::notion::wnid == 106718862)); // Blacklist ethnic slurs + + for (;;) + { + std::cout << "Generating tweet..." << std::endl; + + verbly::token utterance; + + verbly::inflection nounInfl = verbly::inflection::base; + verbly::inflection hypoInfl = verbly::inflection::base; + + if (std::bernoulli_distribution(1.0/2.0)(random_engine)) + { + hypoInfl = verbly::inflection::plural; + } + + if (std::bernoulli_distribution(1.0/2.0)(random_engine)) + { + nounInfl = verbly::inflection::plural; + } + + verbly::word noun = database.words( + (verbly::notion::partOfSpeech == verbly::part_of_speech::noun) + && (verbly::word::forms(nounInfl) %= formFilter) + && cleanFilter + && (verbly::notion::hyponyms %= + (verbly::word::forms(hypoInfl) %= formFilter) + && cleanFilter)).first(); + + verbly::word hyponym = database.words( + (verbly::notion::partOfSpeech == verbly::part_of_speech::noun) + && (verbly::notion::hypernyms %= noun) + && cleanFilter + && (verbly::word::forms(hypoInfl) %= formFilter)).first(); + + if (std::bernoulli_distribution(1.0/2.0)(random_engine)) + { + utterance << verbly::token(noun, nounInfl); + utterance << verbly::token(hyponym, hypoInfl); + } else { + utterance << verbly::token(hyponym, hypoInfl); + utterance << verbly::token(noun, nounInfl); + } + + std::string action = utterance.compile(); + std::cout << action << std::endl; + + try + { + std::cout << "Tweeting..." << std::endl; + + client.updateStatus(action); + + std::cout << "Success!" << std::endl; + std::cout << "Waiting..." << std::endl; + } catch (const twitter::twitter_error& e) + { + std::cout << "Error while tweeting: " << e.what() << std::endl; + } + + std::this_thread::sleep_for(std::chrono::hours(1)); + + std::cout << std::endl; + } +} + -- cgit 1.4.1