Logo Search packages:      
Sourcecode: znc-extra version File versions  Download package

antiidle.cpp

/*
 * Copyright (C) 2004-2009  See the AUTHORS file for details.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation.
 */

#include "Nick.h"
#include "User.h"

class CAntiIdle;

class CAntiIdleJob : public CTimer
{
public:
      CAntiIdleJob(CModule* pModule, unsigned int uInterval, unsigned int uCycles, const CString& sLabel, const CString& sDescription)
            : CTimer(pModule, uInterval, uCycles, sLabel, sDescription) {}
      virtual ~CAntiIdleJob() {}

protected:
      virtual void RunJob();
};

class CAntiIdle : public CModule
{
public:
      MODCONSTRUCTOR(CAntiIdle) {
            SetInterval(30);
      }

      virtual ~CAntiIdle() {}

      virtual bool OnLoad(const CString& sArgs, CString& sErrorMsg)
      {
            if(!sArgs.Trim_n().empty())
                  SetInterval(sArgs.ToInt());
            return true;
      }

      virtual void OnModCommand( const CString& sCommand )
      {
            CString sCmdName = sCommand.Token(0).AsLower();
            if(sCmdName == "set")
            {
                  CString sInterval = sCommand.Token(1, true);
                  SetInterval(sInterval.ToInt());

                  if(m_uiInterval == 0)
                        PutModule("AntiIdle is now turned off.");
                  else
                        PutModule("AntiIdle is now set to " + CString(m_uiInterval) + " seconds.");
            } else if(sCmdName == "off") {
                  SetInterval(0);
                  PutModule("AntiIdle is now turned off");
            } else if(sCmdName == "show") {
                  if(m_uiInterval == 0)
                        PutModule("AntiIdle is turned off.");
                  else
                        PutModule("AntiIdle is set to " + CString(m_uiInterval) + " seconds.");
            } else {
                  PutModule("Commands: set, off, show");
            }
      }

      virtual EModRet OnPrivMsg(CNick &Nick, CString &sMessage)
      {
            if(Nick.GetNick() == GetUser()->GetIRCNick().GetNick()
                        && sMessage == "\xAE")
                  return HALTCORE;

            return CONTINUE;
      }

private:
      void SetInterval(int i)
      {
            if(i < 0)
                  return;

            m_uiInterval = i;

            RemTimer("AntiIdle");

            if(m_uiInterval == 0) {
                  return;
            }

            AddTimer(new CAntiIdleJob(this, m_uiInterval, 0, "AntiIdle", "Periodically sends a msg to the user"));
      }

      unsigned int    m_uiInterval;
};

//! This function sends a query with (r) back to the user
void CAntiIdleJob::RunJob() {
      CString sNick = GetModule()->GetUser()->GetIRCNick().GetNick();
      GetModule()->PutIRC("PRIVMSG " + sNick + " :\xAE");
}

MODULEDEFS(CAntiIdle, "Hides your real idle time")

Generated by  Doxygen 1.6.0   Back to index