Wistaro

Palachat

Dec 8th, 2018 (edited)
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.14 KB | None | 0 0
  1. /*PALACHAT v0.1
  2. *
  3. * Developed by Wistaro
  4. *
  5. * This sofware will listen the chat of Minecraft/Paladium and send desktop notifications in case of mentions or PM.
  6. * More details on paladium-pvp.fr/forum
  7. *
  8. * Help and feedback on my Discord: Wistaro#9308
  9. */
  10. /*
  11. /* Copyright 2018 Wistaro
  12.  
  13. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
  14.  
  15. 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.<br />
  16. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
  17. */
  18. #include <iostream>
  19. #include <algorithm>
  20. #include <fstream>
  21. #include <string.h>
  22. #include "SDL2/SDL.h"
  23. #include "SDL2/SDL_mixer.h"
  24.  
  25.  
  26. using namespace std;
  27. static const char *NotifSong = "notif.wav";
  28.  
  29. int main(int argc, char **argv) {
  30.    
  31.     /*Window initialisation*/
  32.     printf("~ PalaChat v0.1 ~ \n Made by Wistaro\n\n");
  33.  
  34.     SDL_Window* fenetre(0);
  35.  
  36.  
  37.     // Initialisation de la SDL
  38.     printf("Initializing files...\n");
  39.     if(SDL_Init(SDL_INIT_VIDEO) < 0)
  40.     {
  41.         cout << "Failed to load SDL : " << SDL_GetError() << endl << endl;
  42.         SDL_Quit();
  43.         system("pause");
  44.         return -1;
  45.     }
  46.  
  47.     /*Mixer init*/
  48.     int result = 0;
  49.     int flags = MIX_INIT_OGG;
  50.  
  51.     if (SDL_Init(SDL_INIT_AUDIO) < 0) {
  52.         printf("Failed to init SDL\n \n");
  53.         system("pause");
  54.         return 0;
  55.     }
  56.     Mix_OpenAudio(22050, AUDIO_S16SYS, 2, 640);
  57.     Mix_Music *music = Mix_LoadMUS(NotifSong);
  58.  
  59.     /*Loading logfile*/
  60.     int nbLignes, cpt, i, j, k;
  61.     int notif = 0;
  62.     i = 0;
  63.     size_t pos_chat;
  64.     string ligne, lastligne,lastlignebuff,chatOnly,psdMp, mpMsg, logPath, ligneBuff, psdUser;
  65.     string detectIsMe;
  66.     string wordDetected, mpMessageNotif;
  67.     string lowerCaseString;
  68.     const char * lastligneConst;
  69.     char flagNotif = 0;
  70.     psdMp = "x";
  71.  
  72.  
  73.  
  74.     /*Import datas from config file*/
  75.         ifstream configfile("config.txt" , ios::in);
  76.  
  77.         if(configfile.good()){
  78.                 while(getline( configfile, ligneBuff)){
  79.                     i++;
  80.                     if(i == 1) logPath = ligneBuff;
  81.                     if(i == 2) psdUser = ligneBuff;
  82.                     if(i == 3) wordDetected = 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.     /*Avoid non-detection issues*/
  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 << endl;
  98.  
  99.     while(1){
  100.             nbLignes = 0;
  101.             cpt = 0;
  102.  
  103.     ifstream logfile(logPath+"/latest.log" , ios::in);
  104.  
  105.     if(!logfile.good()){
  106.         printf("\nImpossible de lire le fichier de log de Paladium!\n \n");
  107.         system("pause");
  108.         return 0;
  109.     }
  110.  
  111.     while(std::getline( logfile, ligne))
  112.     {
  113.         nbLignes++;
  114.     }
  115.  
  116. logfile.clear();
  117. logfile.seekg(0, ios::beg);
  118. while(logfile)
  119.         {
  120.             getline(logfile, ligne);
  121.             cpt++;
  122.             if (cpt ==  nbLignes)
  123.                lastligne = ligne;
  124.         }
  125.  
  126.         lastligneConst  = lastligne.c_str();
  127.  
  128.         if(lastlignebuff != lastligne && strstr(  lastligneConst, "[CHAT]") != NULL){
  129.  
  130.             pos_chat = lastligne.find('CHAT')+3;
  131.             chatOnly = lastligne.substr (pos_chat);
  132.  
  133.              if(strstr(  chatOnly.c_str() , "-> moi") != NULL){
  134.                 notif = 1; //mp notif
  135.                 psdMp = chatOnly.substr(1, (chatOnly.find("->")-2));
  136.                 mpMsg = chatOnly.substr(chatOnly.find("-> moi")+8);
  137.  
  138.                 cout << "MP de  " << psdMp << ">> " << mpMsg  << endl;
  139.  
  140.             }else if(strstr(  chatOnly.c_str() , ">") != NULL){
  141.                     cout << "CHAT >> "<< chatOnly  << endl;
  142.  
  143.             }else {
  144.                 cout << "LOG >> "<< chatOnly  << endl;
  145.             }
  146.  
  147.                 lowerCaseString = lastligne;
  148.                 transform(lowerCaseString.begin(), lowerCaseString.end(), lowerCaseString.begin(), ::tolower);
  149.  
  150.                 if(strstr(lowerCaseString.c_str(), wordDetected.c_str()) != NULL || strstr(lowerCaseString.c_str(),psdUser.c_str()) != NULL){
  151.                      //if I'm talking, don't send me notifications :p
  152.                      detectIsMe = lastligne.substr(1,  lastligne.find(">"));
  153.                      transform(detectIsMe.begin(), detectIsMe.end(), detectIsMe.begin(), ::tolower);
  154.  
  155.                        if(strstr(  detectIsMe.c_str() ,psdUser.c_str() ) != NULL){
  156.                             notif = 0;
  157.                        }else{
  158.                             notif =1;
  159.                        }
  160.  
  161.                 }
  162.  
  163.  
  164.         }
  165.     lastlignebuff = lastligne;
  166.  
  167.         if(notif == 1 && psdMp != "x"){
  168.             //notification de MP
  169.             mpMessageNotif = "Vous avez recu un message privé de "+psdMp+" sur Paladium!\n"+mpMsg;
  170.             Mix_PlayMusic(music, 1);
  171.             SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,
  172.                          "Message privé reçu",
  173.                          mpMessageNotif.c_str(),
  174.                          fenetre);
  175.             notif = 0;
  176.             psdMp = "x";
  177.         }else if(notif == 1){
  178.             //Autre notification
  179.             Mix_PlayMusic(music, 1);
  180.             SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION,
  181.                          "Notification",
  182.                          "Vous avez recu une notification sur Paladium!.",
  183.                          fenetre);
  184.             notif = 0;
  185.         }
  186.     }
  187.  
  188.  
  189.  
  190.     /*Exiting programm*/
  191.     while (!SDL_QuitRequested()) {
  192.         SDL_Delay(250);
  193.     }
  194.  
  195.     Mix_FreeMusic(music);
  196.     SDL_Quit();
  197.     return 0;
  198. }
Add Comment
Please, Sign In to add comment