예제 #1
0
def create_connection(channel, irc_network, irc_port, irc_channel, irc_bot_nick):
    """
    This will create a new IRC<->channel connection.
    """
    if not type(channel) == Channel:
        new_channel = Channel.objects.filter(db_key=channel)
        if not new_channel:
            logger.log_errmsg(_("Cannot attach IRC<->Evennia: Evennia Channel '%s' not found") % channel)
            return False
        channel = new_channel[0]
    key = build_connection_key(channel, irc_network, irc_port, irc_channel, irc_bot_nick)

    old_conns = ExternalChannelConnection.objects.filter(db_external_key=key)
    if old_conns:
        return False
    config = "%s|%s|%s|%s" % (irc_network, irc_port, irc_channel, irc_bot_nick)
    # how the channel will be able to contact this protocol
    send_code =  "from src.comms.irc import IRC_CHANNELS\n"
    send_code += "matched_ircs = [irc for irc in IRC_CHANNELS if irc.factory.key == '%s']\n" % key
    send_code += "[irc.msg_irc(message, senders=[self]) for irc in matched_ircs]\n"
    conn = ExternalChannelConnection(db_channel=channel, db_external_key=key, db_external_send_code=send_code,
                                     db_external_config=config)
    conn.save()

    # connect
    connect_to_irc(conn)
    return True
예제 #2
0
파일: rss.py 프로젝트: BGCX262/zsmud-git
def create_connection(channel, url, interval):
    """
    This will create a new RSS->channel connection
    """
    if not type(channel) == Channel:
        new_channel = Channel.objects.filter(db_key=channel)
        if not new_channel:
            logger.log_errmsg("Cannot attach RSS->Evennia: Evennia Channel '%s' not found." % channel)
            return False
        channel = new_channel[0]
    key = build_connection_key(channel, url)
    old_conns = ExternalChannelConnection.objects.filter(db_external_key=key)
    if old_conns:
        return False
    config = "%s|%i" % (url, interval)
    # There is no sendback from evennia to the rss, so we need not define any sendback code.
    conn = ExternalChannelConnection(db_channel=channel, db_external_key=key, db_external_config=config)
    conn.save()

    connect_to_rss(conn)
    return True
예제 #3
0
파일: imc2.py 프로젝트: Aumnren/evennia
def create_connection(channel, imc2_channel):
    """
    This will create a new IMC2<->channel connection.
    """

    if not type(channel) == ChannelDB:
        new_channel = ChannelDB.objects.filter(db_key=channel)
        if not new_channel:
            logger.log_errmsg(_("Cannot attach IMC2<->Evennia: Evennia Channel '%s' not found") % channel)
            return False
        channel = new_channel[0]
    key = build_connection_key(channel, imc2_channel)

    old_conns = ExternalChannelConnection.objects.filter(db_external_key=key)
    if old_conns:
        # this evennia channel is already connected to imc. Check
        # if imc2_channel is different.
        # connection already exists. We try to only connect a new channel
        old_config = old_conns[0].db_external_config.split(",")
        if imc2_channel in old_config:
            return False # we already listen to this channel
        else:
            # We add a new imc2_channel to listen to
            old_config.append(imc2_channel)
            old_conns[0].db_external_config = ",".join(old_config)
            old_conns[0].save()
            return True
    else:
        # no old connection found; create a new one.
        config = imc2_channel
        # how the evennia channel will be able to contact this protocol in reverse
        send_code = "from src.comms.imc2 import IMC2_CLIENT\n"
        send_code += "data={'channel':from_channel}\n"
        send_code += "IMC2_CLIENT.msg_imc2(message, senders=[self])\n"
        conn = ExternalChannelConnection(db_channel=channel, db_external_key=key, db_external_send_code=send_code,
                                         db_external_config=config)
        conn.save()
        return True