diff --git a/arch-discordbots-service/service/main.cpp b/arch-discordbots-service/service/main.cpp index 4246522..4820c31 100644 --- a/arch-discordbots-service/service/main.cpp +++ b/arch-discordbots-service/service/main.cpp @@ -1,218 +1,65 @@ -#include #include #include #include -#include -#include -#include -#include -#include -#include +#include #include -#include "timercpp.h" using namespace std; -void beforeExit(); -void beforeExit(int i); -void setCursor(int XPos, int YPos); -void getCursor(int* x, int* y); -void hideCursor(); -void showCursor(); -void closeScreen(); -void closeScreen(short width, short height); -void writeAt(int x, int y, char ch); -void printFrame(vector> screen, short width, short height); -void screen_type(vector> &screen, string str, int x, int y, bool vertical); -void screen_clear(vector> &screen); -void eachFrame(vector> &screen, short width, short height); +static inline string trim(string &s) { + s.erase(s.begin(), find_if(s.begin(), s.end(), [](unsigned char ch) { + return !isspace(ch); + })); + s.erase(find_if(s.rbegin(), s.rend(), [](unsigned char ch) { + return !isspace(ch); + }).base(), s.end()); +} -Timer t = Timer(); -ofstream Log ("log.txt"); +void loadfile(vector &scripts) { + ifstream infile("bots"); + string line; + int linenum = 0; + while (getline(infile, line)) { + linenum++; + istringstream iss(line); + string str = iss.str(); -int main(int argc, char **argv) -{ + if (str.length() == 0 || str.substr(0,1) == "#") + break; - //^C - signal(SIGINT, beforeExit); - //abort() - signal(SIGABRT, beforeExit); - //sent by "kill" command - signal(SIGTERM, beforeExit); - //^Z - signal(SIGTSTP, beforeExit); - atexit(beforeExit); + string loc = ""; + string script = "start"; - float framerate = 10.0; - float frameduration = 1000.0/framerate; - - vector> screen; // WILL ALWAYS BE AT LEAST 1x1 - - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - // width: w.ws_col - // height: w.ws_row - - for (int i = 0; i < w.ws_row-1; i++) - cout << endl; - - hideCursor(); - - t.setInterval([&]() - { - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - - if (w.ws_row > 0 && w.ws_col > 0) - { - - //fill vector - screen.resize(w.ws_col); - for (auto& col : screen) - col.resize(w.ws_row); - - eachFrame(screen, w.ws_col, w.ws_row); - - printFrame(screen, w.ws_col, w.ws_row); + size_t pos = 0; + string token; + while ((pos = str.find(":")) != string::npos) { + token = str.substr(0, pos); + trim(token); + if (loc.length() == 0) + loc = token; + else + script = token; + str.erase(0, pos + 1); } - }, (int) frameduration); - while (true); + if (loc.length() == 0) { + cout << "WARNING: skipping line " << linenum << endl; + break; + } - return 0; -} - -void beforeExit() -{ - //closeScreen(); - setCursor(0,0); - showCursor(); - t.stop(); - cout << "goodbye" << endl; - exit(0); -} - -void beforeExit(int i) -{ - beforeExit(); -} - -void setCursor(int XPos, int YPos) -{ - printf("\033[%d;%dH",YPos+1,XPos+1); -} -void getCursor(int* x, int* y) -{ - printf("\033[6n"); - scanf("\033[%d;%dR", x, y); -} - -void hideCursor() -{ - cout << "\e[?25l" << flush; -} - -void showCursor() -{ - cout << "\e[?25h" << flush; -} - -void writeAt(int x, int y, char ch) -{ - if (ch == 0) - ch == ' '; - setCursor(x, y); - //printf("%s", ch); - cout << ch << flush; - fflush(stdout); -} - -void closeScreen() -{ - struct winsize w; - ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); - closeScreen(w.ws_col, w.ws_row); -} - -void closeScreen(short width, short height) -{ - setCursor(0, 0); - for (int i = 0; i < height; i++) - for (int j = 0; j < width; j++) - writeAt(j, i, ' '); - setCursor(0, 0); - -} - -void printFrame(vector> screen, short width, short height) -{ - //print frame - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - //cout << screen.at(x).at(y); - writeAt(x, y, screen.at(x).at(y)); - //cout << endl; - } - setCursor(0,0); - /*for (auto& col : screen) - { - for (auto& ch : col) - cout << ch; - cout << endl; - }*/ - //cout << endl; -} - -void screen_type(vector> &screen, string str, int x, int y, bool vertical) -{ - - int width = 0, - height = 0; - - if (str.length()) - { - - //str.append("\033[0m"); - - width = 1; - height = 1; - - if (vertical) - height = str.length(); - else - width = str.length(); - - width = min(width, (int) screen.size() - x); - height = min(height, (int) screen.at(0).size() - y); + scripts.push_back({ loc, script }); } - for (int i = x, ii = 0, d = 0; ii < width; i++, ii++) - for (int j = y, jj = 0; jj < height; j++, jj++, d++) - { - //cout << str.at(d) << " " << i << "," << j << endl; - screen.at(i).at(j) = str.at(d); - } } -void screen_clear(vector> &screen) -{ - for (int i = 0; i < screen.size(); i++) - for (int j = 0; j < screen.at(i).size(); j++) - screen.at(i).at(j) = ' '; -} +int main() { + + vector scripts; + + loadfile(scripts); -void eachFrame(vector> &screen, short width, short height) -{ - screen_clear(screen); - - stringstream ss; - - //ss << width << "x" << height; - ss << "Hello World."; - - screen_type(screen, ss.str(), 10, 10, false); } \ No newline at end of file diff --git a/arch-discordbots-service/service/scripts b/arch-discordbots-service/service/scripts new file mode 100644 index 0000000..a94496b --- /dev/null +++ b/arch-discordbots-service/service/scripts @@ -0,0 +1,7 @@ +~/discordBots/autovc/ : start +~/discordBots/autorole/ : start +~/discordBots/funnyBike/cleverbot/ : start +~/discordBots/funnyBike/watch-it-talk/ : start +~/discordBots/funnyBike/wolframalpha/ : start +~/discordBots/IKEA-Canada-Support/rolemanager : tmux +~/discordBots/thom wishlane server/rolemanager : tmux \ No newline at end of file diff --git a/arch-discordbots-service/service/timercpp.h b/arch-discordbots-service/service/timercpp.h deleted file mode 100644 index 9878c06..0000000 --- a/arch-discordbots-service/service/timercpp.h +++ /dev/null @@ -1,50 +0,0 @@ -// https: //github.com/99x/timercpp/blob/master/timercpp.h -#include -#include -#include - -class Timer -{ - bool clear = false; - - public: - void setTimeout(auto function, int delay); - void setInterval(auto function, int interval); - void stop(); -}; - -void Timer::setTimeout(auto function, int delay) -{ - this->clear = false; - std::thread t([=]() { - if (this->clear) - return; - std::this_thread::sleep_for(std::chrono::milliseconds(delay)); - if (this->clear) - return; - function(); - }); - t.detach(); -} - -void Timer::setInterval(auto function, int interval) -{ - this->clear = false; - std::thread t([=]() { - while (true) - { - if (this->clear) - return; - std::this_thread::sleep_for(std::chrono::milliseconds(interval)); - if (this->clear) - return; - function(); - } - }); - t.detach(); -} - -void Timer::stop() -{ - this->clear = true; -} \ No newline at end of file