1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include <iostream>
#include <optional>
#include <pqxx/pqxx>
#include <string>
#include "bundle.hpp"
#include "commands/command.hpp"
#include "config.hpp"
#include "handlers.hpp"
#include "irc/client.hpp"
#include "irc/message.hpp"
#include "localization/localization.hpp"
int main(int argc, char *argv[]) {
std::cout << "hi world\n";
std::optional<bot::Configuration> o_cfg =
bot::parse_configuration_from_file(".env");
if (!o_cfg.has_value()) {
return -1;
}
bot::Configuration cfg = o_cfg.value();
if (cfg.bot_password.empty() || cfg.bot_username.empty()) {
std::cerr << "*** BOT_USERNAME and BOT_PASSWORD must be set!\n";
return -1;
}
if (cfg.database.name.empty() || cfg.database.user.empty() ||
cfg.database.password.empty() || cfg.database.host.empty() ||
cfg.database.port.empty()) {
std::cerr
<< "*** DB_NAME, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT must be set!\n";
return -1;
}
bot::irc::Client client(cfg.bot_username, cfg.bot_password);
bot::command::CommandLoader command_loader;
bot::loc::Localization localization("localization");
client.join(cfg.bot_username);
pqxx::connection conn(GET_DATABASE_CONNECTION_URL(cfg));
pqxx::work work(conn);
auto rows = work.exec("SELECT alias_name FROM channels");
for (const auto &row : rows) {
auto name = row[0].as<std::string>();
client.join(name);
}
work.commit();
conn.close();
client.on<bot::irc::MessageType::Privmsg>(
[&client, &command_loader, &localization,
&cfg](const bot::irc::Message<bot::irc::MessageType::Privmsg> &message) {
bot::InstanceBundle bundle{client, localization};
pqxx::connection conn(GET_DATABASE_CONNECTION_URL(cfg));
bot::handlers::handle_private_message(bundle, command_loader, message,
conn);
conn.close();
});
client.run();
return 0;
}
|