Client IRC simple avec python

Client IRC

J'ai écrit un simple client IRC avec python.

irc.py


#!/usr/bin/env python

import sys, socket, os


TARGET = "localhost"
PORT = 6667

BUF_SIZE = 1024


def irc_connect(irc_socket, target, port):
    irc_socket.connect((target, port))


def login(irc_server, nickname, username, realname, hostname = "hostname", servername = "*"):
    nick_message = "NICK " + nickname + "\n"
    user_message = "USER %s %s %s :%s\n" % (username, hostname, servername, realname)


    irc_server.send(nick_message)
    irc_server.send(user_message)


def join(irc_server, channel):
    join_message = "JOIN " + channel + "\n"

    irc_server.send(join_message)


def pong(irc_server, daemon, daemon2 = None):
    pong_message = "PONG %s %s" % (daemon, daemon2)
    pong_message += "\n"

    irc_server.send(pong_message)


def privmsg(irc_server, channel, text):
    privmsg_message = "PRIVMSG %s :%s\n" % (channel, text)

    irc_server.send(privmsg_message)


def quit(irc_server):
    None


def handle_privmsg(prefix, receiver, text):
    print ""
    print prefix + ">" + text
    print ""


def wait_message(irc_server):
    while(True):
        msg_buf = irc_server.recv(BUF_SIZE)
        msg_buf = msg_buf.strip()

        prefix = None
        if msg_buf[0] == ":":
            p = msg_buf.find(" ")
            prefix = msg_buf[1:p]
            msg_buf = msg_buf[(p + 1):]

        p = msg_buf.find(":")
        if p != -1:#has last param which starts with ":"
            last_param = msg_buf[(p + 1):]
            msg_buf = msg_buf[:p]
            msg_buf = msg_buf.strip()

        messages = msg_buf.split()

        command = messages[0]
        params = messages[1:]

        if command == "PING":
            pong(irc_server, params[0])
        elif command == "PRIVMSG":
            text = last_param
            receiver = ""

            for param in params:
                receiver = param


            handle_privmsg(prefix, receiver, text)


def client_interface(irc_server, channel, prompt = ">"):
    while(True):
        print prompt,
        line = raw_input()

        if line == "quit":
            quit(irc_server)
            sys.exit(0)

        privmsg(irc_server, channel, line)


def main():
    nickname = "nickhoge"
    username = "usr"
    realname = "realname"
    channel = "#test_channel"

    irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    irc_connect(irc, TARGET, PORT)

    login(irc, nickname, username, realname)

    join(irc, channel)

    pid = os.fork()

    if(pid == 0):#child
        wait_message(irc)
    else:
        client_interface(irc, channel)


if __name__ == "__main__":
    main()

référence

https://tools.ietf.org/html/rfc1459#section-4.4.1 http://www.codereading.com/codereading/python/python-irc-client.html

Recommended Posts

Client IRC simple avec python
GRPC simple en Python
Un client HTTP simple implémenté en Python
Analyse de régression simple avec Python
Première analyse de régression simple en Python
OAuth 2 simple avec Python (urllib + oauthlib)
Implémentation d'un algorithme simple en Python 2
Exécutez un algorithme simple en Python
Logique gacha simple écrite en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
SendKeys en Python
Client API Slack simple réalisé avec Python
Essayez de dessiner une animation simple en Python
Créer une application GUI simple en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Constante en Python
Ecrire une méthode de cupidité simple en Python
FizzBuzz en Python
Sqlite en Python
Étape AIC en Python
Ecrire un plugin Vim simple en Python 3
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Constante en Python
nCr en Python.
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
LiNGAM en Python
Aplatir en Python
Aplatir en python
Configurer un serveur HTTPS simple avec Python 3
Notes de programme simples Pub / Sub en Python
Notes pour la mise en œuvre d'un co-filtrage simple en Python
Configurer un serveur SMTP simple en Python
Liste triée en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
AtCoder # 2 tous les jours avec Python