summaryrefslogtreecommitdiff
path: root/cmdline.c
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-04-01 21:13:31 -0700
committerTrumeet <yuuta@yuuta.moe>2022-04-01 21:13:31 -0700
commit318a1ef88bb5ea09ff4cf953908aef5c76735a46 (patch)
tree9cdd8be7679e6a336af7a82ca4947b3ffdac97b2 /cmdline.c
downloadksyxbot-318a1ef88bb5ea09ff4cf953908aef5c76735a46.tar
ksyxbot-318a1ef88bb5ea09ff4cf953908aef5c76735a46.tar.gz
ksyxbot-318a1ef88bb5ea09ff4cf953908aef5c76735a46.tar.bz2
ksyxbot-318a1ef88bb5ea09ff4cf953908aef5c76735a46.zip
First Commit
Diffstat (limited to 'cmdline.c')
-rw-r--r--cmdline.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/cmdline.c b/cmdline.c
new file mode 100644
index 0000000..778c7ae
--- /dev/null
+++ b/cmdline.c
@@ -0,0 +1,91 @@
+/*
+ * Created by yuuta on 4/1/22.
+ */
+
+#include "botd.h"
+#include "log.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <limits.h>
+#include <inttypes.h>
+#include <errno.h>
+
+static inline void parse_api_id(const char *str) {
+ char *endptr;
+ intmax_t num = strtoimax(str, &endptr, 10);
+ if (strcmp(endptr, "") != 0 || (num == INTMAX_MAX && errno == ERANGE) ||
+ num > INT_MAX || num < INT_MIN) {
+ LOGFEV("Invalid API Hash: %s.", 64, str);
+ }
+ cmd.api_id = (int) num;
+}
+
+void parse_cmdline(int argc, char **argv) {
+ for (int i = 1; i < argc; i++) {
+ const char *arg = argv[i];
+ if (arg[0] != '-' || arg[1] != '-')
+ LOGFEV("Unexpected argument: %s.", 64, arg);
+ const char *a = &arg[2];
+ if (!strcmp(a, "test")) {
+ LOGD("Test DC is in use.");
+ cmd.test_dc = true;
+ } else if (!strcmp(a, "logout")) {
+ cmd.logout = true;
+ } else if (!strcmp(a, "api_id")) {
+ if (i == (argc - 1)) LOGFEV("%s expects an argument.", 64, arg);
+ parse_api_id(argv[++i]);
+ } else if (!strcmp(a, "api_hash")) {
+ if (i == (argc - 1)) LOGFEV("%s expects an argument.", 64, arg);
+ cmd.api_hash = argv[++i];
+ } else if (!strcmp(a, "bot_token")) {
+ if (i == (argc - 1)) LOGFEV("%s expects an argument.", 64, arg);
+ cmd.bot_token = argv[++i];
+ } else if (!strcmp(a, "td_path")) {
+ if (i == (argc - 1)) LOGFEV("%s expects an argument.", 64, arg);
+ cmd.td_path = argv[++i];
+ } else if (!strcmp(a, "db_path")) {
+ if (i == (argc - 1)) LOGFEV("%s expects an argument.", 64, arg);
+ cmd.db_path = argv[++i];
+ } else if (!strcmp(a, "help")) {
+ printf("Usage: "
+ "[TD_API_ID=] "
+ "[TD_API_HASH=] "
+ "[TD_PATH=] "
+ "[BOT_TOKEN=] "
+ "[DB_PATH=] "
+ "%s "
+ "[--help] "
+ "[--logout] "
+ "[--test] "
+ "[--api_id TD_API_ID] "
+ "[--api_hash TD_API_HASH] "
+ "[--td_path TD_PATH] "
+ "[--bot_token BOT_TOKEN] "
+ "[--db_path DB_PATH] ",
+ argv[0]);
+ exit(0);
+ } else {
+ LOGFEV("Invalid command: %s. Use %s --help to view usage.",
+ 64,
+ arg,
+ argv[0]);
+ }
+ }
+
+ if (!cmd.api_hash && !(cmd.api_hash = getenv("TD_API_HASH")))
+ LOGFEV("Required environment variable %s is missing.", 64, "TD_API_HASH");
+ if (!cmd.bot_token && !(cmd.bot_token = getenv("BOT_TOKEN")))
+ LOGFEV("Required environment variable %s is missing.", 64, "BOT_TOKEN");
+ if (!cmd.td_path && !(cmd.td_path = getenv("TD_PATH")))
+ LOGFEV("Required environment variable %s is missing.", 64, "TD_PATH");
+ if (!cmd.db_path && !(cmd.db_path = getenv("DB_PATH")))
+ LOGFEV("Required environment variable %s is missing.", 64, "DB_PATH");
+ if (!cmd.api_id) {
+ const char *a;
+ if (!(a = getenv("TD_API_ID")))
+ LOGFEV("Required environment variable %s is missing.", 64, "TD_API_ID");
+ parse_api_id(a);
+ }
+} \ No newline at end of file