#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <pthread.h>
#include <assert.h>
void
print_usage(void)
{
printf("\n\nThis bot demonstrates how easy it is to start a DM"
" with someone and talk without leaving the terminal\n"
"1. Type at the terminal <recipient_id>:<message> to start your "
"conversation\n"
"\tex: 1232232312321232123:Hello there friend!\n"
"2. For successive messages to the same person, you can just type "
"the message"
" without the need of specifying the recipient_id everytime\n"
"3. If you wish to start a new conversation, repeat the #1 format\n"
"\nTYPE ANY KEY TO START BOT\n");
}
void
on_ready(
struct discord *client,
const struct discord_ready *event)
{
"ManualDM-Bot succesfully connected to Discord as %s#%s!",
event->user->username, event->user->discriminator);
}
void
on_dm_receive(
struct discord *client,
const struct discord_message *event)
{
if (event->author->bot) return;
printf("%s:%s\n", event->author->username, event->content);
}
void *
read_input(void *p_client)
{
pthread_detach(pthread_self());
while (1) {
memset(buf, 0, sizeof(buf));
fgets(buf, sizeof(buf), stdin);
if (!*buf) continue;
memset(msg, 0, sizeof(msg));
recipient_id = 0;
sscanf(buf, "%" PRIu64 ":%[^\n]", &recipient_id, msg);
if (!recipient_id || !*msg) {
sscanf(buf, "%[^\n]", msg);
if (!*msg) {
printf("Expected format: <*recipient_id>:<message>");
continue;
}
}
else {
struct discord_channel ret_channel = { 0 };
dm_channel_id = ret_channel.id;
}
}
}
pthread_exit(NULL);
}
int
main(int argc, char *argv[])
{
const char *config_file;
if (argc > 1)
config_file = argv[1];
else
config_file = "../config.json";
assert(NULL != client && "Couldn't initialize client");
print_usage();
fgetc(stdin);
pthread_t tid;
pthread_create(&tid, NULL, &read_input, client);
}
#define DISCORD_SYNC_FLAG
flag for enabling sync mode without expecting a datatype return
Definition: discord-response.h:68
Public functions and datatypes.
uint64_t u64snowflake
Snowflake datatype.
Definition: types.h:28
#define CCORD_OK
Definition: concord-error.h:60
CCORDcode discord_create_message(struct discord *client, u64snowflake channel_id, struct discord_create_message *params, struct discord_ret_message *ret)
Post a message to a guild text or DM channel.
CCORDcode discord_create_dm(struct discord *client, struct discord_create_dm *params, struct discord_ret_channel *ret)
Create a new DM channel with a given user.
void discord_cleanup(struct discord *client)
Free a Discord Client handle.
CCORDcode discord_run(struct discord *client)
Start a connection to the Discord Gateway.
struct discord * discord_from_json(const char config_file[])
Creates a Discord Client handle from a config.json file.
#define DISCORD_MAX_MESSAGE_LEN
Definition: discord.h:71
#define discord_data_cleanup(_client, _data)
Cleanup a Discord data type wrapped into a reflectc_wrap structure.
Definition: discord.h:496
void discord_add_intents(struct discord *client, uint64_t code)
Subscribe to Discord Events.
void discord_remove_intents(struct discord *client, uint64_t code)
Unsubscribe from Discord Events.
void discord_set_on_message_create(struct discord *client, void(*callback)(struct discord *client, const struct discord_message *event))
Triggers when a message is created.
void discord_set_on_ready(struct discord *client, void(*callback)(struct discord *client, const struct discord_ready *event))
Triggers when the client session is ready.
#define logmod_log
Alias to logmod_nlog for C89 compatibility.
Definition: logmod.h:487
Request's return context.
Definition: discord-response.h:89
struct discord_channel * sync
Definition: discord-response.h:89
Request's return context.
Definition: discord-response.h:91
The Discord client handler.
Definition: discord-internal.h:1206