Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite the IRC library #351

Open
Vgr255 opened this issue Aug 13, 2018 · 2 comments
Open

Rewrite the IRC library #351

Vgr255 opened this issue Aug 13, 2018 · 2 comments

Comments

@Vgr255
Copy link
Member

Vgr255 commented Aug 13, 2018

We're currently using a very old (2010-ish) IRC library, and we've just bolted stuff on top of other stuff for a long time. Unlike the rest of the bot which is better handled through procedural refactors, we will be better off if we fling the current library into the sun and make a new one. Or also adapt an existing one, that works too.

The new library must:

  • Support Python 3.5+ (supporting older versions is fine too, but 3.5 is the minimum)
  • Support TLS connections and SASL external (client certificates)
  • Use asyncio
  • Support having multiple instances of the client connected to the same server (but with different nicks) running simultaneously
  • Not assume that it's the only thing running in the asyncio event loop. We'll have other non-IRC stuff in there too. Notably, this means that each time control is passed to the IRC library, it should fully process one thing only (not half-process a thing and return control to us, or work through its entire backlog of things before returning control to us)
  • No flood control/throttling in the lib itself; our scheduler (main loop) will take care of that

Ideal, although not required:

  • Maintained in a separate repo that we can pull from to update the library
  • Automatic netsplit detection and handling
  • Automatic reconnection if disconnected from server
  • Support the following capabilities: account-notify, account-tag, chghost, extended-join, multi-prefix, userhost-in-names

Fancy stuff that's not really needed but would be nice:

  • Ability to stay connected while the rest of the bot restarts (don't focus on this immediately if you're going to do it at all)

What this library does NOT need to do:

  • Keep any form of API compatibility with the current library

If using an existing library, it's preferred if we don't have to make a fork of it to customize it to our liking. That way we can easily keep using the upstream as they update to support more things (like ircv3 features). This means that the library we're using should have maintainers who are actually present and are willing to accept pull requests to add additional functionality we may require.

If you're interested in doing this, let us know in #lykos and we can get you a repo under the lykoss group on GitHub.

@Fudster
Copy link
Contributor

Fudster commented Jan 15, 2019

Could we maybe use https://github.com/jaraco/irc?

@skizzerz
Copy link
Member

No SSL support in the asyncio version, so no that won’t work. If we’re usung an existing lib I want to be able to use it as-is instead of making a fork and customizing.

I’ll update the description soonish with a more up to date list of requirements.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants