2024-02-22 16:09:56 -05:00
|
|
|
#include <iostream>
|
|
|
|
#include <dpp/dpp.h>
|
|
|
|
#include <cstdlib>
|
2024-02-26 10:03:34 -05:00
|
|
|
#include <utility>
|
2024-02-22 16:09:56 -05:00
|
|
|
#include <blt/std/logging.h>
|
|
|
|
#include <blt/parse/argparse.h>
|
2024-02-26 10:03:34 -05:00
|
|
|
#include <sqlite_orm/sqlite_orm.h>
|
|
|
|
#include "blt/std/types.h"
|
2024-02-25 14:05:45 -05:00
|
|
|
|
2024-02-26 10:03:34 -05:00
|
|
|
struct message_t
|
|
|
|
{
|
|
|
|
blt::u64 messageID;
|
|
|
|
blt::u64 channelID;
|
|
|
|
blt::u64 userID;
|
|
|
|
std::string content;
|
|
|
|
};
|
|
|
|
|
2024-02-26 12:17:59 -05:00
|
|
|
struct attachment_t
|
|
|
|
{
|
|
|
|
blt::u64 messageID;
|
|
|
|
blt::u64 channelID;
|
|
|
|
std::string url;
|
|
|
|
};
|
|
|
|
|
2024-02-26 10:03:34 -05:00
|
|
|
struct user_info_t
|
|
|
|
{
|
|
|
|
blt::u64 userID;
|
|
|
|
std::string username;
|
|
|
|
std::string global_nickname;
|
|
|
|
std::string server_name;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct channel_info_t
|
|
|
|
{
|
|
|
|
blt::u64 channelID;
|
|
|
|
blt::u64 changeTime;
|
|
|
|
std::string channel_name;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct message_edits_t
|
|
|
|
{
|
|
|
|
blt::u64 messageID;
|
|
|
|
blt::u64 channelID;
|
|
|
|
blt::u64 userID;
|
|
|
|
std::string new_content;
|
|
|
|
};
|
|
|
|
|
2024-02-26 12:17:59 -05:00
|
|
|
struct message_deletes_t
|
|
|
|
{
|
|
|
|
blt::u64 messageID;
|
|
|
|
blt::u64 channelID;
|
|
|
|
};
|
|
|
|
|
2024-02-26 10:03:34 -05:00
|
|
|
|
|
|
|
struct db_obj
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
blt::u64 guildID;
|
|
|
|
public:
|
2024-02-26 12:17:59 -05:00
|
|
|
std::vector<message_t> messages;
|
|
|
|
std::vector<user_info_t> user_data;
|
|
|
|
std::vector<channel_info_t> channel_data;
|
|
|
|
std::vector<message_edits_t> message_edits;
|
|
|
|
std::vector<message_deletes_t> message_deletes;
|
|
|
|
std::vector<attachment_t> attachments;
|
|
|
|
public:
|
|
|
|
explicit db_obj(blt::u64 guildID): guildID(guildID)
|
2024-02-26 10:03:34 -05:00
|
|
|
{}
|
2024-02-26 12:17:59 -05:00
|
|
|
|
|
|
|
void dump()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void check_for_updates(dpp::cluster& bot)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
2024-02-26 10:03:34 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
namespace db
|
|
|
|
{
|
|
|
|
void sync_databases()
|
|
|
|
{
|
|
|
|
using namespace sqlite_orm;
|
|
|
|
auto storage = make_storage(":memory:",
|
|
|
|
make_table("messages", make_column("id", &message_t::userID, primary_key())));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
blt::hashmap_t<blt::u64, db_obj> databases;
|
2024-02-22 16:09:56 -05:00
|
|
|
|
2024-02-26 12:17:59 -05:00
|
|
|
db_obj& get(blt::u64 id)
|
|
|
|
{
|
|
|
|
if (databases.find(id) == databases.end())
|
|
|
|
databases.insert({id, db_obj{id}});
|
|
|
|
return databases.at(id);
|
|
|
|
}
|
|
|
|
|
2024-02-22 16:09:56 -05:00
|
|
|
int main(int argc, const char** argv)
|
|
|
|
{
|
2024-02-26 10:03:34 -05:00
|
|
|
using namespace sqlite_orm;
|
|
|
|
|
2024-02-22 16:09:56 -05:00
|
|
|
blt::arg_parse parser;
|
2024-02-25 14:05:45 -05:00
|
|
|
parser.addArgument(blt::arg_builder("-t", "--token").setAction(blt::arg_action_t::STORE).setHelp("The discord bot token").build());
|
|
|
|
parser.addArgument(blt::arg_builder("-p", "--path").setAction(blt::arg_action_t::STORE).setHelp("Path to store the archive data").build());
|
2024-02-22 16:09:56 -05:00
|
|
|
|
|
|
|
auto args = parser.parse_args(argc, argv);
|
|
|
|
|
2024-02-25 14:05:45 -05:00
|
|
|
dpp::cluster bot(args.get<std::string>("token"), dpp::i_default_intents | dpp::i_message_content | dpp::i_all_intents);
|
|
|
|
|
2024-02-26 12:43:31 -05:00
|
|
|
bot.on_user_update([&bot](const dpp::user_update_t& event) {
|
|
|
|
BLT_INFO("User '%s' updated in some way; global name: '%s'", event.updated.username.c_str(), event.updated.global_name.c_str());
|
|
|
|
});
|
|
|
|
|
|
|
|
bot.on_guild_member_update([&bot](const dpp::guild_member_update_t& event) {
|
|
|
|
|
|
|
|
});
|
|
|
|
|
2024-02-25 14:05:45 -05:00
|
|
|
bot.on_message_delete([&bot](const dpp::message_delete_t& event) {
|
2024-02-26 12:17:59 -05:00
|
|
|
BLT_DEBUG("Message %ld deleted content in %ld", event.id, event.channel_id);
|
2024-02-22 16:09:56 -05:00
|
|
|
});
|
|
|
|
|
2024-02-25 14:05:45 -05:00
|
|
|
bot.on_message_delete_bulk([&bot](const dpp::message_delete_bulk_t& event) {
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
bot.on_message_update([&bot](const dpp::message_update_t& event) {
|
2024-02-26 10:03:34 -05:00
|
|
|
BLT_INFO("%ld (from user %ld in channel %ld ['%s']) -> '%s'", event.msg.id, event.msg.author.id, event.msg.channel_id,
|
|
|
|
event.msg.author.username.c_str(), event.msg.content.c_str());
|
2024-02-22 16:09:56 -05:00
|
|
|
});
|
|
|
|
|
2024-02-23 14:37:23 -05:00
|
|
|
bot.on_message_create([&bot](const dpp::message_create_t& event) {
|
|
|
|
if (event.msg.id == bot.me.id)
|
|
|
|
return;
|
2024-02-26 12:17:59 -05:00
|
|
|
if (blt::string::contains(event.msg.content, "/dump"))
|
2024-02-23 14:37:23 -05:00
|
|
|
{
|
2024-02-26 12:17:59 -05:00
|
|
|
for (auto g : databases)
|
|
|
|
g.second.dump();
|
2024-02-23 14:37:23 -05:00
|
|
|
}
|
2024-02-26 12:17:59 -05:00
|
|
|
auto& storage = get(event.msg.guild_id);
|
|
|
|
storage.messages.push_back({
|
|
|
|
event.msg.id,
|
|
|
|
event.msg.channel_id,
|
|
|
|
event.msg.author.id,
|
|
|
|
event.msg.content
|
|
|
|
});
|
|
|
|
|
|
|
|
for (const dpp::attachment& attach : event.msg.attachments)
|
|
|
|
storage.attachments.push_back({event.msg.id, event.msg.channel_id, attach.url});
|
2024-02-22 16:22:48 -05:00
|
|
|
});
|
|
|
|
|
2024-02-22 16:09:56 -05:00
|
|
|
bot.start(dpp::st_wait);
|
|
|
|
return 0;
|
|
|
|
}
|