about summary refs log tree commit diff stats
path: root/blessed.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'blessed.cpp')
-rw-r--r--blessed.cpp67
1 files changed, 34 insertions, 33 deletions
diff --git a/blessed.cpp b/blessed.cpp index 2649f45..8bb8d3f 100644 --- a/blessed.cpp +++ b/blessed.cpp
@@ -20,19 +20,19 @@ int main(int argc, char** argv)
20 20
21 std::random_device random_device; 21 std::random_device random_device;
22 std::mt19937 random_engine{random_device()}; 22 std::mt19937 random_engine{random_device()};
23 23
24 YAML::Node config = YAML::LoadFile(configfile); 24 YAML::Node config = YAML::LoadFile(configfile);
25 25
26 twitter::auth auth; 26 twitter::auth auth;
27 auth.setConsumerKey(config["consumer_key"].as<std::string>()); 27 auth.setConsumerKey(config["consumer_key"].as<std::string>());
28 auth.setConsumerSecret(config["consumer_secret"].as<std::string>()); 28 auth.setConsumerSecret(config["consumer_secret"].as<std::string>());
29 auth.setAccessKey(config["access_key"].as<std::string>()); 29 auth.setAccessKey(config["access_key"].as<std::string>());
30 auth.setAccessSecret(config["access_secret"].as<std::string>()); 30 auth.setAccessSecret(config["access_secret"].as<std::string>());
31 31
32 twitter::client client(auth); 32 twitter::client client(auth);
33 33
34 verbly::data database {config["verbly_datafile"].as<std::string>()}; 34 verbly::database database {config["verbly_datafile"].as<std::string>()};
35 35
36 std::vector<std::string> emojis; 36 std::vector<std::string> emojis;
37 { 37 {
38 std::ifstream emojifile(config["emoji_file"].as<std::string>()); 38 std::ifstream emojifile(config["emoji_file"].as<std::string>());
@@ -49,33 +49,33 @@ int main(int argc, char** argv)
49 { 49 {
50 line.pop_back(); 50 line.pop_back();
51 } 51 }
52 52
53 emojis.push_back(line); 53 emojis.push_back(line);
54 } 54 }
55 } 55 }
56 56
57 std::uniform_int_distribution<int> emojidist(0, emojis.size()-1); 57 std::uniform_int_distribution<int> emojidist(0, emojis.size()-1);
58 std::bernoulli_distribution continuedist(1.0/2.0); 58 std::bernoulli_distribution continuedist(1.0/2.0);
59 59
60 verbly::query<verbly::form> verbQuery = database.forms(
61 (verbly::notion::partOfSpeech == verbly::part_of_speech::verb)
62 && (verbly::pronunciation::rhymes));
63
60 for (;;) 64 for (;;)
61 { 65 {
62 std::cout << "Generating tweet..." << std::endl; 66 std::cout << "Generating tweet..." << std::endl;
63 67
64 std::string exclamation; 68 verbly::form verb = verbQuery.first();
65 while (exclamation.empty()) 69
66 { 70 verbly::form noun = database.forms(
67 verbly::verb v = database.verbs().random().limit(1).has_pronunciation().run().front(); 71 (verbly::notion::partOfSpeech == verbly::part_of_speech::noun)
68 auto rhyms = database.nouns().rhymes_with(v).random().limit(1).is_not_proper().run(); 72 && (verbly::pronunciation::rhymes %= verb)
69 if (!rhyms.empty()) 73 && (verbly::form::proper == false)
70 { 74 && (verbly::form::id != verb.getId())
71 auto n = rhyms.front(); 75 && !(verbly::word::usageDomains %= (verbly::notion::wnid == 106718862))).first();
72 if (n.base_form() != v.base_form()) 76
73 { 77 std::string exclamation = "god " + verb.getText() + " this " + noun.getText();
74 exclamation = "god " + v.base_form() + " this " + n.base_form(); 78
75 }
76 }
77 }
78
79 std::string emojibef; 79 std::string emojibef;
80 std::string emojiaft; 80 std::string emojiaft;
81 int emn = 0; 81 int emn = 0;
@@ -86,7 +86,7 @@ int main(int argc, char** argv)
86 emojibef += em; 86 emojibef += em;
87 emojiaft = em + emojiaft; 87 emojiaft = em + emojiaft;
88 } while (continuedist(random_engine)); 88 } while (continuedist(random_engine));
89 89
90 std::string result; 90 std::string result;
91 if (emn > 3) 91 if (emn > 3)
92 { 92 {
@@ -94,22 +94,23 @@ int main(int argc, char** argv)
94 } else { 94 } else {
95 result = emojibef + " " + exclamation + " " + emojiaft; 95 result = emojibef + " " + exclamation + " " + emojiaft;
96 } 96 }
97 97
98 result.resize(140); 98 result.resize(140);
99 std::cout << result << std::endl; 99 std::cout << result << std::endl;
100 100
101 try 101 try
102 { 102 {
103 client.updateStatus(result); 103 client.updateStatus(result);
104 104
105 std::cout << "Tweeted!" << std::endl; 105 std::cout << "Tweeted!" << std::endl;
106 std::cout << "Waiting..." << std::endl;
107
108 std::this_thread::sleep_for(std::chrono::hours(1));
109
110 std::cout << std::endl;
106 } catch (const twitter::twitter_error& e) 111 } catch (const twitter::twitter_error& e)
107 { 112 {
108 std::cout << "Twitter error: " << e.what() << std::endl; 113 std::cout << "Twitter error: " << e.what() << std::endl;
109 } 114 }
110
111 std::cout << "Waiting..." << std::endl;
112
113 std::this_thread::sleep_for(std::chrono::hours(1));
114 } 115 }
115} 116}