Git Product home page Git Product logo

irc-cpp's People

Contributors

aarondl avatar dylanj avatar

Watchers

 avatar  avatar

irc-cpp's Issues

Connecting and disconnecting from server

Netcode must be written to use the configured server values to resolve hostnames, and connect via tcp to the desired irc server. The server should be able to be connected to and disconnected from with single calls into the netcode irc server object.

Module commands

Parsing privmsg and notice events are for stiffs. The modules should provide a way for a developer to register a command with the bot. A command is different than parsing a privmsg/notice in that there's less work involved for the developer. Typically commands for bots are in the form:

<prefix><command> <command arguments>...

By eliminating having to manually parse the prefix and the command name, we can allow more streamlined module development. The code that implements "commands" will use a bot-wide configured prefix, and parse these registered commands and send the arguments to the modules event handler. This is a mini eventing system in it's own right.

Logging facility

All input/output from the bot should be kept in one place. An abstracted logging system should be built. This system should output to any stream given to it.

Configuration logic errors

The configuration errors should be logged to the bot's logging facilities. These errors are not simple validation but logical errors that would prevent the bot from working correctly such as: A server's send buffer should not be 1 byte wide.

Reading configuration file

The configuration file must be read and parsed into an accessible singleton to allow all bot components to read from the configuration.

SSL

SSL connections to IRC server should be supported.

User recognition

There should be some facility to "identify" a user. This identification must be very rigorous and secure as it could create holes in the bot's ability to serve clients with powerful access control based modules.

Typically this is done by some manner of hostmask as nickname isn't a solid identifier of identity on some irc networks.

An attempt could be made by parsing whois data to obtain additional network related information and base some or all identification on that perhaps.

Netcode read & write

The bot must be able to use a public interface into the bot's netcode to send and receive data. This data should be split on \r\n according to the RFC and should not present these extraneous characters to the bot's calling functions.

Channel attributes

The channel system must be able to provide information about a channel. Topic, users, modes, bans.

Channel database

The channel database should be able to store persisting information about channels. It should be abstracted to the point that a: FileChannelDB or MysqlChannelDB could be inserted at any moment. Allowing for freedom of storage engine.

Configuration fallback values

Default configuration values should be hardcoded to allow fallback when the entities are not present in the configuration file.

User database

The user database should be able to store persisting information about users. It should be abstracted to the point that a: FileUserDB or MysqlUserDB could be inserted at any moment. Allowing for freedom of storage engine.

Module unloading

Modules should be able to be collapsed. This entails removing all events registered by the module, and collapsing it's address space. However that's going to be done.

Configurable Perform

The configuration should support perform commands. These commands could be IRC raw or some sort of DSL specific to the config file that limits the abilities of the perform section of the configuration.

Module eventing

The modules should be able to register events and have their event handlers called when irc protocol events are parsed by the eventing system.

Module loading

Modules should be able to be loaded. This entails bringing the module into memory space, and executing an initialization function that will probably pass something in to allow event registration.

Netcode output buffering

There should be some form of intelligent output buffering for the bot. A call into the write function should 'queue' the data for sending. The queue should be consumed in a manner than does not allow the bot to flood off a network.

Configurable Module details

Modules should have their configuration data stored inside the global configuration system to avoid having multiple places to configure the bot.

IRC Protocol events

IRC Protocol events must be created. Either a system to create them, or some hardcoded transference of the rfc document to enable these events to be registered to.

User options

Users should be able to create their own configuration options for certain modules. Since this is likely to be a common thing the bot should assume that modules will want to do this and allow users to store configuration per module (maybe per server per module?).

IRC Protocol parsing

All IRC messages must map to either an event, or should trigger the raw handler. It may be desirable to do both.

User access levels

Some global access level should be available to users. Whether in the form of flags or numerical or both. This should allow modules to query this information in some fashion.

User information

The user system should be able to provide information about a user, since the last time they were recognized, their current server and channel whereabouts etc.

Validate configuration file

The configuration file in whatever format must be validated to ensure correctness of all entities and inclusion of required entities.

Event registration & unregistration

Events must be able to have callbacks registered to them. So if an IRC Protocol comes in saying: :someuser NOTICE BotName :Hello, the notice event must be fired to allow for modules and the bot's core to handle the event.

Linked List

Linked list implementation will be important for the bot.

Hash table

A hash table will be important for the core.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.