예제 #1
0
파일: chat.py 프로젝트: dginovker/ruqqus
def message_of_the_day(args, guild, v):
    """Set or clear a Message of the Day, to be shown to users upon joining this channel. Messages are shown as being spoken by the guild. (Must be Guildmaster.)"""

    if len(args) >= 2:

        message = " ".join(args[1:])
        message = preprocess(message)
        with CustomRenderer() as renderer:
            message = renderer.render(mistletoe.Document(message))
        message = sanitize(message, linkgen=True)

        guild.motd = message
        g.db.add(guild)
        g.db.commit()

        send("Message updated")
        data = {
            "avatar": guild.profile_url,
            "username": guild.name,
            "text": guild.motd,
            "room": guild.fullname,
            "guild": guild.name,
            "time": now()
        }
        emit('motd', data, to=request.sid)

    else:
        guild.motd = ''
        g.db.add(guild)
        g.db.commit()
        send("Message removed")
예제 #2
0
파일: chat.py 프로젝트: dginovker/ruqqus
def speak(text, user, guild, as_guild=False):

    if isinstance(text, list):
        text = " ".join(text)

    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    if as_guild:
        data = {
            "avatar": guild.profile_url,
            "username": guild.name,
            "text": text,
            "room": guild.fullname,
            "guild": guild.name,
            "time": now()
        }
        emit("motd", data, to=guild.fullname)
    else:
        data = {
            "avatar": user.profile_url,
            "username": user.username,
            "text": text,
            "room": guild.fullname,
            "guild": guild.name,
            "time": now()
        }
        if request.headers.get("X-User-Type") == "Bot":
            emit("bot", data, to=guild.fullname)
        else:
            emit("speak", data, to=guild.fullname)
        return
예제 #3
0
파일: chat.py 프로젝트: Jimmerz28/Drama
def wallop(args, guild, v):
    """Send a global broadcast. (Must be site administrator.)"""
    text = " ".join(args[1:])
    if not text:
        return
    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)
    ban = screen(text)
    if ban:
        speak_help(f"Unable to send message - banned domain {ban}")
        return

    data = {
        "avatar": v.profile_url,
        "username": v.username,
        "text": text,
        "time": now(),
        "userlink": v.permalink
    }

    sent = []
    for uid in SIDS:
        for sid in SIDS[uid]:
            for roomid in rooms(sid=sid):
                if roomid.startswith('t4_') and roomid not in sent:
                    emit('wallop', data, to=roomid)
                    sent.append(roomid)
예제 #4
0
파일: chat.py 프로젝트: Jimmerz28/Drama
def message_of_the_day(args, guild, v):
    """Set or clear a Message of the Day, to be shown to users upon joining this channel. Messages are shown as being spoken by the guild. (Must be Guildmaster.)"""

    if len(args) >= 2:

        message = " ".join(args[1:])
        message = preprocess(message)
        with CustomRenderer() as renderer:
            message = renderer.render(mistletoe.Document(message))
        message = sanitize(message, linkgen=True)

        ban = screen(message)
        if ban:
            speak_help(f"Unable to send message - banned domain {ban}")
            return

        guild.motd = message
        g.db.add(guild)
        g.db.commit()

        speak_help(f"Welcome message updated to:")
        speak(guild.motd, v, guild, event='motd', to=request.sid)

    else:
        guild.motd = ''
        g.db.add(guild)
        g.db.commit()
        send("Message removed")
예제 #5
0
파일: chat.py 프로젝트: Jimmerz28/Drama
def direct_message(args, guild, v):
    """Send someone a private message. Use Tab to reply to the most recent private message"""

    if len(args) < 3:
        send("Not enough arguments. Type `/help msg` for more information.")
        return

    user = get_user(args[1], graceful=True)
    if not user:
        send(f"No user named @{args[1]}.")
        return

    targets = SIDS.get(user.id, [])
    if (not targets) or v.any_block_exists(user):
        speak_help(f"@{user.username} is not online right now.")
        return

    text = " ".join(args[2:])

    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    ban = screen(text)
    if ban:
        speak_help(f"Unable to send message - banned domain {ban}")
        return

    t = now()

    data = {
        "avatar": v.profile_url,
        "username": v.username,
        "text": text,
        "time": t,
        "userlink": v.permalink
    }

    for sid in targets:
        emit('msg-in', data, to=sid)

    data = {
        "avatar": v.profile_url,
        "username": user.username,
        "text": text,
        "time": t,
        "userlink": user.permalink
    }
    for sid in SIDS.get(v.id, []):
        emit('msg-out', data, to=sid)
예제 #6
0
파일: chat.py 프로젝트: dginovker/ruqqus
def say_guild(args, guild, v):
    """Say something as the Guild. (Must be Guildmaster.)"""

    text = " ".join(args[1:])
    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    data = {
        "avatar": guild.profile_url,
        "username": guild.name,
        "text": text,
        "time": now()
    }
    emit('motd', data, to=guild.fullname)
예제 #7
0
def speak(text, user, guild, as_guild=False, event="speak", to=None):

    if isinstance(text, list):
        text = " ".join(text)

    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    to = to or guild.fullname

    ban = screen(text)
    if ban:
        speak_help(f"Unable to send message - banned domain {ban}")
        return

    if as_guild or event == "motd":
        data = {
            "avatar": guild.profile_url,
            "username": guild.name,
            "text": text,
            "room": guild.fullname,
            "guild": guild.name,
            "time": now(),
            'userlink': guild.permalink
        }
        emit("motd", data, to=to)
    else:
        data = {
            "avatar": user.profile_url,
            "username": user.username,
            "text": text,
            "room": guild.fullname,
            "guild": guild.name,
            "time": now(),
            "userlink": user.permalink
        }

        if request.headers.get("X-User-Type", "").lower() == "bot":
            emit("bot", data, to=to)
        else:
            emit(event, data, to=to)
        return
예제 #8
0
파일: chat.py 프로젝트: dginovker/ruqqus
def speak_as_gm(args, guild, v):
    """Distinguish your message with a Guildmaster's crown. (Must be Guildmaster.)"""
    text = " ".join(args[1:])
    if not text:
        return
    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    data = {
        "avatar": v.profile_url,
        "username": v.username,
        "text": text,
        "room": guild.fullname,
        "guild": guild.name,
        "time": now()
    }
    emit('gm', data, to=guild.fullname)
예제 #9
0
파일: chat.py 프로젝트: dginovker/ruqqus
def speak_admin(args, guild, v):
    """Distinguish your message with an Administrator's shield. (Must be site administrator.)"""

    text = " ".join(args[1:])
    if not text:
        return
    text = preprocess(text)
    with CustomRenderer() as renderer:
        text = renderer.render(mistletoe.Document(text))
    text = sanitize(text, linkgen=True)

    data = {
        "avatar": v.profile_url,
        "username": v.username,
        "text": text,
        'guild': guild.name,
        'room': guild.fullname,
        "time": now()
    }
    emit('admin', data, to=guild.fullname)