view doc/examples/template-plugin.cpp @ 757:97b356010785

Irccd: create (command|jsapi)::registry Make two list of constructor functions to initialize all command and all Javascript modules to avoid duplicating efforts in case of change. While here, update test fixtures to load all of them for simplicity.
author David Demelier <markand@malikania.fr>
date Mon, 06 Aug 2018 21:27:00 +0200
parents 6635b9187d71
children
line wrap: on
line source

/*
 * This example file show how to fill irccd callbacks for a native plugin.
 *
 * All of the defined callbacks are optional and may be removed.
 */

#include <iostream>

#include <irccd/plugin-dynlib.hpp>      // (in irccd_onReload, irccd_onLoad and irccd_onUnload)
#include <irccd/server.hpp>
#include <irccd/util.hpp>               // for util::join (in irccd_onNames)

using namespace irccd;

extern "C" {

/* --- onCommand ---------------------------------------------------- */

void irccd_onCommand(Irccd &,
                     const std::shared_ptr<Server> &server,
                     const std::string &origin,
                     const std::string &channel,
                     const std::string &message)
{
    std::cout << "onCommand: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", message=" << message << std::endl;
}

/* --- onConnect ---------------------------------------------------- */

void irccd_onConnect(Irccd &, const std::shared_ptr<Server> &server)
{
    std::cout << "onConnect: server=" << server->name() << std::endl;
}

/* --- onChannelMode ------------------------------------------------ */

void irccd_onChannelMode(Irccd &,
                         const std::shared_ptr<Server> &server,
                         const std::string &origin,
                         const std::string &channel,
                         const std::string &mode,
                         const std::string &arg)
{
    std::cout << "onChannelMode: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", mode=" << mode
          << ", arg=" << arg << std::endl;
}

/* --- onChannelNotice ---------------------------------------------- */

void irccd_onChannelNotice(Irccd &irccd,
                           const std::shared_ptr<Server> &server,
                           const std::string &origin,
                           const std::string &channel,
                           const std::string &notice)
{
    std::cout << "onChannelNotice: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", notice=" << notice << std::endl;
}

/* --- onInvite ----------------------------------------------------- */

void irccd_onInvite(Irccd &irccd, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &channel)
{
    std::cout << "onInvite: server=" << server->name() << ", origin=" << origin << ", channel=" << channel << std::endl;
}

/* --- onJoin ------------------------------------------------------- */

void irccd_onJoin(Irccd &irccd, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &channel)
{
    std::cout << "onJoin: server=" << server->name() << ", origin=" << origin << ", channel=" << channel << std::endl;
}

/* --- onKick ------------------------------------------------------- */

void irccd_onKick(Irccd &irccd,
                  const std::shared_ptr<Server> &server,
                  const std::string &origin,
                  const std::string &channel,
                  const std::string &target,
                  const std::string &reason)
{
    std::cout << "onKick: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", target=" << channel
          << ", reason=" << reason << std::endl;
}

/* --- onLoad ------------------------------------------------------- */

void irccd_onLoad(Irccd &, DynlibPlugin &plugin)
{
    std::cout << "onLoad: plugin=" << plugin.name() << std::endl;
}

/* --- onMessage ---------------------------------------------------- */

void irccd_onMessage(Irccd &irccd,
                     const std::shared_ptr<Server> &server,
                     const std::string &origin,
                     const std::string &channel,
                     const std::string &message)
{
    std::cout << "onMessage: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", message=" << message << std::endl;
}

/* --- onMe --------------------------------------------------------- */

void irccd_onMe(Irccd &irccd,
                const std::shared_ptr<Server> &server,
                const std::string &origin,
                const std::string &channel,
                const std::string &message)
{
    std::cout << "onMe: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", message=" << message << std::endl;
}

/* --- onMode ------------------------------------------------------- */

void irccd_onMode(Irccd &irccd, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &mode)
{
    std::cout << "onMode: server=" << server->name() << ", origin=" << origin << ", mode=" << mode << std::endl;
}

/* --- onNames ------------------------------------------------------ */

void irccd_onNames(Irccd &irccd,
                   const std::shared_ptr<Server> &server,
                   const std::string &channel,
                   const std::vector<std::string> &list)
{
    std::cout << "onNames: server=" << server->name()
          << ", channel=" << channel
          << ", list=" << util::join(list.begin(), list.end(), ", ") << std::endl;
}

/* --- onNick ------------------------------------------------------- */

void irccd_onNick(Irccd &irccd, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &nick)
{
    std::cout << "onNick: server=" << server->name() << ", origin=" << origin << ", nick=" << nick << std::endl;
}

/* --- onNotice ----------------------------------------------------- */

void irccd_onNotice(Irccd &irccd, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &notice)
{
    std::cout << "onNotice: server=" << server->name() << ", origin=" << origin << ", notice=" << notice << std::endl;
}

/* --- onPart ------------------------------------------------------- */

void irccd_onPart(Irccd &irccd,
                  const std::shared_ptr<Server> &server,
                  const std::string &origin,
                  const std::string &channel,
                  const std::string &reason)
{
    std::cout << "onPart: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", reason=" << reason << std::endl;
}

/* --- onQuery ------------------------------------------------------ */

void irccd_onQuery(Irccd &, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &message)
{
    std::cout << "onQuery: server=" << server->name() << ", origin=" << origin << ", message=" << message << std::endl;
}

/* --- onQueryCommand ----------------------------------------------- */

void irccd_onQueryCommand(Irccd &, const std::shared_ptr<Server> &server, const std::string &origin, const std::string &message)
{
    std::cout << "onQueryCommand: server=" << server->name() << ", origin=" << origin << ", message=" << message << std::endl;
}

/* --- onReload ----------------------------------------------------- */

void irccd_onReload(Irccd &irccd, DynlibPlugin &plugin)
{
    std::cout << "onReload: plugin=" << plugin.name() << std::endl;
}

/* --- onTopic ------------------------------------------------------ */

void irccd_onTopic(Irccd &irccd,
                   const std::shared_ptr<Server> &server,
                   const std::string &origin,
                   const std::string &channel,
                   const std::string &topic)
{
    std::cout << "onTopic: server=" << server->name()
          << ", origin=" << origin
          << ", channel=" << channel
          << ", topic=" << topic << std::endl;
}

/* --- onUnload ----------------------------------------------------- */

void irccd_onUnload(Irccd &irccd, DynlibPlugin &plugin)
{
    std::cout << "onUnload: plugin=" << plugin.name() << std::endl;
}

/* --- onWhois ------------------------------------------------------ */

void irccd_onWhois(Irccd &irccd, const std::shared_ptr<Server> &server, const ServerWhois &info)
{
    std::cout << "onWhois: server=" << server->name() << ", info-for=" << info.nick << std::endl;
}

} // !C