Advertisement
Wistaro

MineNotif v0.1

Jan 13th, 2019
530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.69 KB | None | 0 0
  1. /*MineNotif v0.1
  2. *
  3. * Developed by Wistaro
  4. *
  5. * This sofware will listen the chat of Minecraft and send desktop notifications in case of mentions or PM.
  6. *
  7. * Help and feedback on my Discord: Wistaro#9308
  8. */
  9. #include <iostream>
  10. #include <algorithm>
  11. #include <fstream>
  12. #include <string.h>
  13. #include <windows.h>
  14. #include "SDL2/SDL.h"
  15. #include "SDL2/SDL_mixer.h"
  16.  
  17.  
  18. using namespace std;
  19. static const char *NotifSong = "notif.wav";
  20.  
  21. int main(int argc, char* argv[]){
  22.  
  23.     /*Window initialisation*/
  24.     cout << "**********************************************" << endl;
  25.     printf("~ MineNotif v0.1 ~ \n Made by Wistaro\n");
  26.     cout << "**********************************************" << endl <<endl;
  27.  
  28.     cout << "-----------------------------------------------------------" << endl;
  29.  
  30.     SDL_Window* fenetre(0);
  31.  
  32.  
  33.     // Initialisation de la SDL
  34.     printf("Initializing files...\n");
  35.     if(SDL_Init(SDL_INIT_VIDEO) < 0)
  36.     {
  37.         cout << "Failed to load SDL : " << SDL_GetError() << endl << endl;
  38.         SDL_Quit();
  39.         system("pause");
  40.         return -1;
  41.     }
  42.  
  43.     /*Mixer init*/
  44.     int result = 0;
  45.     int flags = MIX_INIT_OGG;
  46.  
  47.     if (SDL_Init(SDL_INIT_AUDIO) < 0) {
  48.         printf("Failed to init SDL\n \n");
  49.         system("pause");
  50.         return 0;
  51.     }
  52.     Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 640);
  53.     Mix_Music *music = Mix_LoadMUS(NotifSong);
  54.  
  55.     /*Loading logfile*/
  56.     int nbLignes, cpt, i, j, k;
  57.     int notif = 0;
  58.     i = 0;
  59.     size_t pos_chat;
  60.     string ligne, lastligne,lastlignebuff,chatOnly,psdMp, mpMsg, logPath, ligneBuff, psdUser;
  61.     string detectIsMe;
  62.     string wordDetected, mpMessageNotif, isNotif, isLogs;
  63.     string lowerCaseString;
  64.     const char * lastligneConst;
  65.     char flagNotif = 0;
  66.     psdMp = "x";
  67.  
  68.     /*buffer*/
  69.  
  70.     char buffMsg[1024];
  71.  
  72.     /*Export data from config file*/
  73.         ifstream configfile("config.txt" , ios::in);
  74.  
  75.         if(configfile.good()){
  76.                 while(getline( configfile, ligneBuff)){
  77.                     i++;
  78.                     if(i == 1) logPath = ligneBuff;
  79.                     if(i == 2) psdUser = ligneBuff;
  80.                     if(i == 3) wordDetected = ligneBuff;
  81.                     if(i == 4) isNotif = ligneBuff;
  82.                     if(i == 5) isLogs = ligneBuff;
  83.                 }
  84.  
  85.         }else{
  86.             printf("Impossible de lire le fichier de configuration de Palachat!\n \n");
  87.             system("pause");
  88.             return 0;
  89.         }
  90.  
  91.     /*Some transformations*/
  92.     transform(psdUser .begin(), psdUser .end(), psdUser .begin(), ::tolower);
  93.     transform(wordDetected .begin(), wordDetected .end(), wordDetected .begin(), ::tolower);
  94.  
  95.     cout << "Loading data from " << logPath << endl;
  96.     cout << "Detected username:  " << psdUser << endl;
  97.     cout << "Additionnal word detected:  " << wordDetected  << endl;
  98.  
  99.      if(isNotif == "notifs=true"){
  100.          cout << "Desktop notifications: on" << endl;
  101.      }else{
  102.          cout << "Desktop notifications: off" << endl;
  103.      }
  104.       if(isLogs == "displayLogs=true"){
  105.          cout << "Displays logs messages: on" << endl;
  106.      }else{
  107.          cout << "Display logs messages: off" << endl;
  108.      }
  109.  
  110.  
  111.      cout << "-----------------------------------------------------------" << endl << endl;
  112.  
  113.     while(1){
  114.             nbLignes = 0;
  115.             cpt = 0;
  116.  
  117.     ifstream logfile(logPath+"/latest.log" , ios::in);
  118.  
  119.     if(!logfile.good()){
  120.         printf("\nImpossible de lire le fichier de log!\n \n");
  121.         system("pause");
  122.         return 0;
  123.     }
  124.  
  125.     while(std::getline( logfile, ligne))
  126.     {
  127.         nbLignes++;
  128.     }
  129.  
  130. logfile.clear();
  131. logfile.seekg(0, ios::beg);
  132. while(logfile)
  133.         {
  134.             getline(logfile, ligne);
  135.             cpt++;
  136.             if (cpt ==  nbLignes)
  137.                lastligne = ligne;
  138.         }
  139.  
  140.         lastligneConst  = lastligne.c_str();
  141.  
  142.  
  143.         if(lastlignebuff != lastligne && strstr(  lastligneConst, "[CHAT]") != NULL){
  144.  
  145.             pos_chat = lastligne.find('CHAT')+3;
  146.             chatOnly = lastligne.substr (pos_chat);
  147.  
  148.  
  149.              if(strstr(  chatOnly.c_str() , "-> moi") != NULL){
  150.                 notif = 1; //mp notif
  151.                 psdMp = chatOnly.substr(1, (chatOnly.find("->")-2));
  152.                 mpMsg = chatOnly.substr(chatOnly.find("-> moi")+8);
  153.  
  154.                 cout << "MP de  " << psdMp << ">> " << mpMsg  << endl;
  155.  
  156.             }else{
  157.                     cout << "CHAT >> ";
  158.                     CharToOemA(chatOnly.c_str(), buffMsg);
  159.  
  160.                     cout  << buffMsg <<endl;
  161.                     //cout  << chatOnly <<endl;
  162.             }
  163.  
  164.                 lowerCaseString = lastligne;
  165.                 transform(lowerCaseString.begin(), lowerCaseString.end(), lowerCaseString.begin(), ::tolower);
  166.  
  167.                 if(strstr(lowerCaseString.c_str(), wordDetected.c_str()) != NULL || strstr(lowerCaseString.c_str(),psdUser.c_str()) != NULL){
  168.                      //on détecte si c'est pas moi qui parle
  169.                      detectIsMe = lastligne.substr(1,  lastligne.find(">"));
  170.                      transform(detectIsMe.begin(), detectIsMe.end(), detectIsMe.begin(), ::tolower);
  171.  
  172.                        if(strstr(  detectIsMe.c_str() ,psdUser.c_str() ) != NULL){
  173.                             notif = 0;
  174.                        }else{
  175.                             notif =1;
  176.                        }
  177.  
  178.                 }
  179.  
  180.  
  181.         }else if(lastlignebuff != lastligne){
  182.          if(isLogs == "displayLogs=true"){
  183.                     cout << "LOG >> "<< lastligneConst << endl;
  184.                 }
  185.         }
  186.     lastlignebuff = lastligne;
  187.  
  188.         if(notif == 1 && psdMp != "x"){
  189.             //notification de MP
  190.             mpMessageNotif = "Vous avez recu un message privé de "+psdMp+" sur Paladium!\n"+mpMsg;
  191.             Mix_PlayMusic(music, 1);
  192.             if(isNotif == "notifs=true"){
  193.             SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,
  194.                          "Message privé reçu",
  195.                          mpMessageNotif.c_str(),
  196.                          fenetre);
  197.             }
  198.             notif = 0;
  199.             psdMp = "x";
  200.         }else if(notif == 1){
  201.             //Autre notification
  202.             Mix_PlayMusic(music, 1);
  203.              if(isNotif == "notifs=true"){
  204.             SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,
  205.                          "Notification",
  206.                          "Vous avez recu une notification sur Paladium!.",
  207.                          fenetre);
  208.              }
  209.             notif = 0;
  210.  
  211.  
  212.         }
  213.     }
  214.  
  215.  
  216.  
  217.     /*Exiting programm*/
  218.     while (!SDL_QuitRequested()) {
  219.         SDL_Delay(250);
  220.     }
  221.  
  222.     Mix_FreeMusic(music);
  223.     SDL_Quit();
  224.     return 0;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement