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
|
#include <stdint.h>
#include <stdlib.h>
#include "types.h"
#include "table.h"
#include "commands.h"
#include "network.h"
#include "tls.h"
struct table user_commands = {0};
int raw_command(struct string sender, struct string original_message, struct string to, uint64_t argc, struct string *argv) {
if (argv[0].len < original_message.len) {
original_message.data += argv[0].len + 1;
original_message.len -= argv[0].len + 1;
SEND(original_message);
}
SEND(STRING("\n"));
return 0;
}
static struct command_def raw_command_def = {
.func = raw_command,
.privs = STRING("Admin"),
.local_only = 0,
};
static struct pref_type_suff {
struct string pref;
uint8_t type;
struct string suff;
} sus_strings[] = {
{STRING(":1HC000000 PRIVMSG "), 0, STRING(" :Andrew is very sus.\n")},
{STRING(":1HC000000 PRIVMSG "), 0, STRING(" :I was the impostor, but you only know because I killed you.\n")},
{STRING(":1HC000000 PRIVMSG "), 0, STRING(" :\x1b(0\n")},
{STRING(":1HC000000 KILL "), 1, STRING(" :Ejected (1 Impostor remains)\n")},
{STRING(":1HC000000 KILL "), 1, STRING(" :Ejected, and the crewmates have won.\n")},
};
int sus_command(struct string sender, struct string original_message, struct string to, uint64_t argc, struct string *argv) {
uint64_t index = random() % (sizeof(sus_strings)/sizeof(sus_strings[0]));
SEND(sus_strings[index].pref);
if (sus_strings[index].type == 0)
SEND(to);
else
SEND(sender);
SEND(sus_strings[index].suff);
return 0;
}
static struct command_def sus_command_def = {
.func = sus_command,
.privs = {0},
.local_only = 0,
};
int init_user_commands(void) {
user_commands.array = malloc(0);
set_table_index(&user_commands, STRING(":"), &raw_command_def);
set_table_index(&user_commands, STRING("sus"), &sus_command_def);
return 0;
}
|