Esempio n. 1
0
def operator(peer, text):  #Постучать оператору беседы в личку
    op = preset._scenr(peer, "operator")
    if op > 0:
        try:
            vkthing.messages.send(peer_id=op, message=text, random_id=randid())
        except Exception as er:  #TODO: изменить
            log(str(er))
            preset.e_scenr(peer, "operator", 0)
            vkthing.messages.send(
                peer_id=peer,
                message=
                "@id%s (Оператор) больше не оператор, так как он запретил отправку сообщений в личку от сообщества."
                % (op),
                random_id=randid())
def g_operator(peer=None, arg="None", sender=None):
    if peer and sender:
        preset.e_scenr(peer, "operator", sender)
        return B(
            "[id%s|Этот] человек назначен оператором данной беседы." %
            (sender), "send")
def g_lack(peer=None, arg="None", sender=None):
    c = arg == "1"
    preset.e_scenr(peer, "lack_of_cookies", c)
    return B(struct % ("долга печенек", c), "send")
def g_limit(peer=None, arg="None", sender=None):
    c = preset.inta(arg, "obsc_warn_ovrc_limit")
    preset.e_scenr(peer, "obsc_warn_ovrc_limit", c)
    return B(struct % ("лимита предупреждений", c), "send")
def g_kick(peer=None, arg="None", sender=None):
    c = preset.inta(arg, "obsc_warn_ovrc_limit")
    preset.e_scenr(peer, "obsc_warn_ovrc", c)
    return B(struct % ("автокика", c), "send")
def g_warn(peer=None, arg="None", sender=None):
    c = arg == "1"
    preset.e_scenr(peer, "obsc_warn", c)
    return B(struct % ("автоматической выдачи предупреждений", c), "send")
def g_filter(peer=None, arg="None", sender=None):
    c = arg == "1"
    preset.e_scenr(peer, "obsc_l", c)
    return B(struct % ("фильтра", str(c)), "send")
def g_pref(peer=None, arg="None", sender=None):
    c = arg
    preset.e_scenr(peer, "prefix", c)
    return B(struct % ("префикса", c), "send")
Esempio n. 9
0
def proceed(msg):
    #{'message': {'date': 1589454222, 'from_id': 147496111, 'id': 13, 'out': 0, 'peer_id': 147496111, 'text': '123', 'conversation_message_id': 13, 'fwd_messages': [], 'important': False, 'random_id': 0, 'attachments': [], 'is_hidden': False}, 'client_info': {'button_actions': ['text', 'vkpay', 'open_app', 'location', 'open_link'], 'keyboard': True, 'inline_keyboard': True, 'lang_id': 0}
    global bot
    if not bot:  #Если бот не инициализирован
        raise "Бота не существует"  #Вывести ошибку
    resp = []  #Список ответов
    if "action" in msg:  #Если определенное действие содержится в сообщении
        ac = msg["action"]
        if ac["type"] == "chat_invite_user":  #Если действие - добавление человека в беседу
            if ac["member_id"] == -bot["id"]:  #Если человек - это наш бот
                resp.append(
                    A(gen_intro(msg["from_id"], msg["peer_id"]),
                      "send"))  #Отправить приветственное сообщение
    if "text" in msg and type(msg["text"]) == str and len(
            msg["text"]) > 0 and msg["peer_id"] > 0:
        #      ^^^^^^^^^^^^^ - Если в сообщении есть текст (всегда, но длина может быть равна нулю)
        #                        ^^^^^^^^^^^^^^^^^^^^^^^^ - Если тип переменной текста - строка (чтобы избежать ошибок)
        #                                                     ^^^^^^^^^^^^^^^^^^^^ - Если длина текста больше нуля (см. первый пункт)
        #                                                                              ^^^^^^^^^^^^^^^^^^ - Если сообщение отправленно НЕ сообществом
        t = msg["text"]  #Текст сообщения
        if msg["peer_id"] == msg[
                "from_id"]:  #Если сообщение отправлено напрямую в личку
            #TODO: может вызывать ошибки, починить
            if userdata._scenr(msg["from_id"], "PM") == 0:
                userdata.e_scenr(msg["from_id"], "PM", 1)
                resp.append(A(gen_PM(msg["peer_id"]), "send"))
        else:
            prfr = preset._scenr(msg["peer_id"], "crowd")
            if not cont(msg["from_id"], prfr):
                prfr.append(msg["from_id"])
                preset.e_scenr(msg["peer_id"], "crowd", prfr)
            pr = preset.get_prefix(
                msg["peer_id"])  #Получаем префикс для конкретной беседы
            if pr == t[:len(pr)]:  #Если сообщение начинается с префикса
                arc = t[len(pr) + 1:].lower().split(" ")  #Получаем список слов
                ac = arc[0]  #Получаем самое первое слово

                #Проверки на команды
                for c in actions_chat:
                    if conts(ac, c.name):
                        try:
                            ans = c.function(
                                msg["peer_id"],
                                len(arc) >= 2 and arc[1] or None,
                                msg["from_id"]
                            )  #TODO: возможно, убрать тернарник (либо приделать отдельный тип вопросов)
                            if ans:
                                resp.append(ans)
                        except Exception as er:  #Если недостаточно аргументов и/или что-то пошло не так
                            resp.append(
                                A(
                                    "Что-то пошло не так. Если это важно - сообщите разработчику код ошибки. [INSERT ERROR CODE]",
                                    "send"))
                            print(er)
                            #TODO: добавить лог ошибок
                        break
            else:  #Если это обычное сообщение
                rest = messages.nice(
                    msg["text"]
                )  #Не передаем отправителя чтобы у нас была честная и прозрачная система
                if not userdata.is_operator(
                        msg["peer_id"], msg["from_id"]
                ):  #Проверяем отправителя, чтобы у нас не было честной и прозрачной системы
                    if rest["points"] < 0:
                        userdata.removepoints(
                            msg["from_id"], rest["points"]
                        )  #Забираем у пользователя кол-во поинтов
                    elif rest["points"] > 0:
                        userdata.addpoints(
                            msg["from_id"],
                            rest["points"])  #Даем пользователю кол-во поинтов

    return resp