diff options
Diffstat (limited to 'blessed.cpp')
-rw-r--r-- | blessed.cpp | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/blessed.cpp b/blessed.cpp new file mode 100644 index 0000000..367d0d1 --- /dev/null +++ b/blessed.cpp | |||
@@ -0,0 +1,92 @@ | |||
1 | #include <yaml-cpp/yaml.h> | ||
2 | #include <iostream> | ||
3 | #include <cstdlib> | ||
4 | #include <ctime> | ||
5 | #include <sstream> | ||
6 | #include <twitcurl.h> | ||
7 | #include <verbly.h> | ||
8 | |||
9 | int main(int argc, char** argv) | ||
10 | { | ||
11 | srand(time(NULL)); | ||
12 | |||
13 | YAML::Node config = YAML::LoadFile("config.yml"); | ||
14 | |||
15 | twitCurl twitter; | ||
16 | twitter.getOAuth().setConsumerKey(config["consumer_key"].as<std::string>()); | ||
17 | twitter.getOAuth().setConsumerSecret(config["consumer_secret"].as<std::string>()); | ||
18 | twitter.getOAuth().setOAuthTokenKey(config["access_key"].as<std::string>()); | ||
19 | twitter.getOAuth().setOAuthTokenSecret(config["access_secret"].as<std::string>()); | ||
20 | |||
21 | verbly::data database {"data.sqlite3"}; | ||
22 | |||
23 | std::vector<std::string> emojis; | ||
24 | std::ifstream emojifile("emojis.txt"); | ||
25 | if (!emojifile.is_open()) | ||
26 | { | ||
27 | std::cout << "Could not find emoji." << std::endl; | ||
28 | return -1; | ||
29 | } | ||
30 | |||
31 | for (;;) | ||
32 | { | ||
33 | std::string line; | ||
34 | if (!getline(emojifile, line)) | ||
35 | { | ||
36 | break; | ||
37 | } | ||
38 | |||
39 | if (line.back() == '\r') | ||
40 | { | ||
41 | line.pop_back(); | ||
42 | } | ||
43 | |||
44 | emojis.push_back(line); | ||
45 | } | ||
46 | |||
47 | for (;;) | ||
48 | { | ||
49 | std::cout << "Generating tweet" << std::endl; | ||
50 | |||
51 | std::string exclamation; | ||
52 | for (;;) | ||
53 | { | ||
54 | verbly::verb v = database.verbs().random(true).limit(1).has_pronunciation(true).run().front(); | ||
55 | auto rhyms = database.nouns().rhymes_with(v).random(true).limit(1).not_derived_from(v).is_not_proper(true).run(); | ||
56 | if (!rhyms.empty()) | ||
57 | { | ||
58 | auto n = rhyms.front(); | ||
59 | if (n.base_form() != v.base_form()) | ||
60 | { | ||
61 | exclamation = "god " + v.base_form() + " this " + n.base_form(); | ||
62 | break; | ||
63 | } | ||
64 | } | ||
65 | } | ||
66 | |||
67 | std::string emojibef; | ||
68 | std::string emojiaft; | ||
69 | do | ||
70 | { | ||
71 | std::string em = emojis[rand() % emojis.size()]; | ||
72 | emojibef += em; | ||
73 | emojiaft = em + emojiaft; | ||
74 | } while (rand() % 4 < 3); | ||
75 | |||
76 | std::string result = emojibef + " " + exclamation + " " + emojiaft; | ||
77 | result.resize(140); | ||
78 | |||
79 | std::string replyMsg; | ||
80 | if (twitter.statusUpdate(result)) | ||
81 | { | ||
82 | twitter.getLastWebResponse(replyMsg); | ||
83 | std::cout << "Twitter message: " << replyMsg << std::endl; | ||
84 | } else { | ||
85 | twitter.getLastCurlError(replyMsg); | ||
86 | std::cout << "Curl error: " << replyMsg << std::endl; | ||
87 | } | ||
88 | |||
89 | std::cout << "Waiting" << std::endl; | ||
90 | sleep(60 * 60); | ||
91 | } | ||
92 | } | ||