summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2018-08-15 18:45:29 -0400
committerKelly Rauchenberger <fefferburbia@gmail.com>2018-08-15 18:45:29 -0400
commit0baed246b6f287e1c03519536011f34e87d19920 (patch)
treed9eb44f28d8ad5edf7e78f47e3bdb830114a7432
parentd7fbb904d0dc70d1eada1dbb5f57f2ee9e5b399f (diff)
downloadinfinite-modern.tar.gz
infinite-modern.tar.bz2
infinite-modern.zip
Started to modernize bot (this is completely broken) modern
-rw-r--r--infinite.cpp83
-rw-r--r--infinite.h31
-rw-r--r--main.cpp33
-rw-r--r--palette.cpp17
-rw-r--r--palette.h20
m---------vendor/verbly0
6 files changed, 145 insertions, 39 deletions
diff --git a/infinite.cpp b/infinite.cpp index 37c4d72..1bf5c8e 100644 --- a/infinite.cpp +++ b/infinite.cpp
@@ -432,38 +432,36 @@ class fill_blanks {
432 } 432 }
433}; 433};
434 434
435int main(int argc, char** argv) 435infinite::infinite(
436 std::string configFile,
437 std::mt19937& rng) :
438 rng_(rng)
436{ 439{
437 srand(time(NULL)); 440 // Load the config file.
438 rand(); rand(); rand(); rand(); 441 YAML::Node config = YAML::LoadFile(configFile);
439
440 Magick::InitializeMagick(nullptr);
441
442 if (argc != 2)
443 {
444 std::cout << "usage: infinite [configfile]" << std::endl;
445 return -1;
446 }
447
448 std::string configfile(argv[1]);
449 YAML::Node config = YAML::LoadFile(configfile);
450 442
443 // Set up the Twitter client.
451 twitter::auth auth; 444 twitter::auth auth;
452 auth.setConsumerKey(config["consumer_key"].as<std::string>()); 445 auth.setConsumerKey(config["consumer_key"].as<std::string>());
453 auth.setConsumerSecret(config["consumer_secret"].as<std::string>()); 446 auth.setConsumerSecret(config["consumer_secret"].as<std::string>());
454 auth.setAccessKey(config["access_key"].as<std::string>()); 447 auth.setAccessKey(config["access_key"].as<std::string>());
455 auth.setAccessSecret(config["access_secret"].as<std::string>()); 448 auth.setAccessSecret(config["access_secret"].as<std::string>());
456 449
457 twitter::client client(auth); 450 client_ = std::unique_ptr<twitter::client>(new twitter::client(auth));
451
452 // Set up the verbly database.
453 database_ = std::unique_ptr<verbly::database>(
454 new verbly::database(config["verbly_datafile"].as<std::string>()));
455
456 // Set up the sentence generator.
457 generator_ = std::unique_ptr<sentence>(new sentence(*database_, rng_));
458 458
459 // Parse forms file 459 // Parse forms file
460 std::map<std::string, std::vector<std::string>> groups;
461 { 460 {
462 std::ifstream datafile(config["forms_file"].as<std::string>()); 461 std::ifstream datafile(config["forms_file"].as<std::string>());
463 if (!datafile.is_open()) 462 if (!datafile.is_open())
464 { 463 {
465 std::cout << "Could not find forms file" << std::endl; 464 throw std::invalid_argument("Could not find forms file");
466 return 1;
467 } 465 }
468 466
469 bool newgroup = true; 467 bool newgroup = true;
@@ -485,7 +483,7 @@ int main(int argc, char** argv)
485 { 483 {
486 newgroup = true; 484 newgroup = true;
487 } else { 485 } else {
488 groups[curgroup].push_back(line); 486 groups_[curgroup].push_back(line);
489 } 487 }
490 } 488 }
491 } 489 }
@@ -493,32 +491,37 @@ int main(int argc, char** argv)
493 491
494 // Read in fonts 492 // Read in fonts
495 std::string fontsdirname = config["fonts"].as<std::string>(); 493 std::string fontsdirname = config["fonts"].as<std::string>();
496 std::vector<std::string> fonts; 494 DIR* fontdir;
495 struct dirent* ent;
496
497 if ((fontdir = opendir(fontsdirname.c_str())) == nullptr)
497 { 498 {
498 DIR* fontdir; 499 throw std::invalid_argument("Couldn't find fonts");
499 struct dirent* ent; 500 }
500 if ((fontdir = opendir(fontsdirname.c_str())) == nullptr)
501 {
502 std::cout << "Couldn't find fonts." << std::endl;
503 return -1;
504 }
505 501
506 while ((ent = readdir(fontdir)) != nullptr) 502 while ((ent = readdir(fontdir)) != nullptr)
503 {
504 std::string dname(ent->d_name);
505 if ((dname.find(".otf") != std::string::npos)
506 || (dname.find(".ttf") != std::string::npos))
507 { 507 {
508 std::string dname(ent->d_name); 508 fonts_.push_back(dname);
509 if ((dname.find(".otf") != std::string::npos) || (dname.find(".ttf") != std::string::npos))
510 {
511 fonts.push_back(dname);
512 }
513 } 509 }
514
515 closedir(fontdir);
516 } 510 }
517 511
512 closedir(fontdir);
513
518 std::string colorsfile(config["colors"].as<std::string>()); 514 std::string colorsfile(config["colors"].as<std::string>());
519 515
520 verbly::data database {config["verbly_datafile"].as<std::string>()};
521 516
517
518}
519
520int main(int argc, char** argv)
521{
522
523
524
522 for (;;) 525 for (;;)
523 { 526 {
524 // Generate the text 527 // Generate the text
@@ -776,12 +779,14 @@ int main(int argc, char** argv)
776 779
777 textimage.annotate(towrite, Magick::CenterGravity); 780 textimage.annotate(towrite, Magick::CenterGravity);
778 textimage.opacity(((double)MaxRGB) * 0.8); 781 textimage.opacity(((double)MaxRGB) * 0.8);
779 image.composite(textimage, 0, 0, Magick::OverCompositeOp); 782 //image.composite(textimage, 0, 0, Magick::OverCompositeOp);
780 783
781 image.magick("jpg"); 784 image.magick("png");
782 785
783 Magick::Blob outputimg; 786 Magick::Blob outputimg;
784 image.write(&outputimg); 787 //image.write(&outputimg);
788 image.write("output.png");
789 return 1;
785 790
786 std::cout << "Generated image!" << std::endl << "Tweeting..." << std::endl; 791 std::cout << "Generated image!" << std::endl << "Tweeting..." << std::endl;
787 792
diff --git a/infinite.h b/infinite.h new file mode 100644 index 0000000..5d447b5 --- /dev/null +++ b/infinite.h
@@ -0,0 +1,31 @@
1#ifndef INFINITE_H_A2B995C7
2#define INFINITE_H_A2B995C7
3
4#include <random>
5#include <string>
6#include <twitter.h>
7#include <verbly.h>
8#include <memory>
9#include <Magick++.h>
10#include "sentence.h"
11
12class infinite {
13public:
14
15 infinite(
16 std::string configFile,
17 std::mt19937& rng);
18
19 void run() const;
20
21private:
22
23 std::mt19937& rng_;
24 std::unique_ptr<verbly::database> database_;
25 std::unique_ptr<sentence> generator_;
26 std::unique_ptr<twitter::client> client_;
27 std::string groups_;
28 std::vector<std::string> fonts_;
29};
30
31#endif /* end of include guard: INFINITE_H_A2B995C7 */
diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..7f2dfa0 --- /dev/null +++ b/main.cpp
@@ -0,0 +1,33 @@
1#include "infinite.h"
2
3int main(int argc, char** argv)
4{
5 Magick::InitializeMagick(nullptr);
6
7 std::random_device randomDevice;
8 std::mt19937 rng(randomDevice());
9
10 if (argc != 2)
11 {
12 std::cout << "usage: infinite [configfile]" << std::endl;
13 return -1;
14 }
15
16 std::string configfile(argv[1]);
17
18 try
19 {
20 infinite bot(configfile, rng);
21
22 try
23 {
24 bot.run();
25 } catch (const std::exception& ex)
26 {
27 std::cout << "Error running bot: " << ex.what() << std::endl;
28 }
29 } catch (const std::exception& ex)
30 {
31 std::cout << "Error initializing bot: " << ex.what() << std::endl;
32 }
33}
diff --git a/palette.cpp b/palette.cpp new file mode 100644 index 0000000..019d956 --- /dev/null +++ b/palette.cpp
@@ -0,0 +1,17 @@
1#include "palette.h"
2
3palette::palette(std::string colors)
4{
5 for (int i=0; i<256; i++)
6 {
7 std::string hexstr = colors.substr(i*6, 6);
8 gradient_.push_back(Color::fromHex(hexstr.c_str()));
9 }
10}
11
12Color palette::getShade(double c) const
13{
14 size_t sc = std::min(static_cast<size_t>(floor(c * 256.0)), 255);
15
16 return gradient_.at(sc);
17}
diff --git a/palette.h b/palette.h new file mode 100644 index 0000000..15862a5 --- /dev/null +++ b/palette.h
@@ -0,0 +1,20 @@
1#ifndef PALETTE_H_09303AB4
2#define PALETTE_H_09303AB4
3
4#include <string>
5#include <vector>
6#include "color.h"
7
8class palette {
9public:
10
11 explicit palette(std::string colors);
12
13 Color getShade(double c) const;
14
15private:
16
17 std::vector<Color> gradient_;
18};
19
20#endif /* end of include guard: PALETTE_H_09303AB4 */
diff --git a/vendor/verbly b/vendor/verbly
Subproject 1f898f3bd66c29672275c2c884b17ba662ced62 Subproject 84bae572d353b03ecb3498df83ba301a456b6c6