aboutsummaryrefslogtreecommitdiff
path: root/commands.c
blob: 578ea475efa2dca75070340e3dc36c5172e75565 (plain) (blame)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// Used-executed commands part of HaxServ
//
// Written by: Test_User <hax@andrewyu.org>
//
// This is free and unencumbered software released into the public
// domain.
//
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
//
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.

#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;
}