首页 > 解决方案 > TyperError python API 机器人

问题描述

我尝试制作一个简单的 bot API 来回答指定用户的问题,但是在向 bot 写入命令时,python 控制台中会显示 TypeError(“'in' 需要字符串作为左操作数,而不是 int”)

根据功能,机器人应开始响应用户的消息,管理员已通过发送消息和命令 + 仇恨 [前缀] 表示

import time
import vk_api
import random
import config as c
from modules import sqlite_methods as m
from threading import Thread
from vk_api.longpoll import VkLongPoll, VkEventType

vk_session = vk_api.VkApi(token=c.u_token)
longpoll = VkLongPoll(vk_session)
vk = vk_session.get_api()


def send_msg_reply(reply_to: int, peer_id: int, message: str, attachment: str = ""):
    return vk.messages.send(**locals(), random_id=0)


def send_msg(peer_id: int, message: str, attachment: str = ""):
    return vk.messages.send(**locals(), random_id=0)


message_user_ids = []
message_users = m.get_all_message_users()
for user in message_users:
    message_user_ids.append(user[0])

photo_user_ids = []
photo_users = m.get_all_photo_users()
for user in photo_users:
    photo_user_ids.append(user[0])

settings_result = []
settings = m.get_settings(1)
for value in settings:
    settings_result.append(value)

random.shuffle(c.MESSAGE_VARIANTS)
random.shuffle(c.PHOTO_VARIANTS)


def hate():
    message_index = 0
    photo_index = 0
    while True:
        try:
            for event in longpoll.listen():
                if event.type == VkEventType.MESSAGE_NEW:

                    if event.user_id in message_user_ids:
                        if not event.from_me:
                            if message_index < len(c.MESSAGE_VARIANTS):
                                time.sleep(settings_result[1])
                                send_msg_reply(event.message_id, event.peer_id, f'{c.MESSAGE_VARIANTS[message_index]}')
                                message_index += 1
                            else:
                                message_index = 0
                                random.shuffle(c.MESSAGE_VARIANTS)
                                time.sleep(settings_result[1])
                                send_msg_reply(event.message_id, event.peer_id, f'{c.MESSAGE_VARIANTS[message_index]}')
                                message_index += 1

                    if event.user_id in photo_user_ids:
                        if not event.from_me:
                            if photo_index < len(c.PHOTO_VARIANTS):
                                time.sleep(settings_result[2])
                                send_msg_reply(event.message_id, event.peer_id, '', f'{c.PHOTO_VARIANTS[photo_index]}')
                                photo_index += 1
                            else:
                                photo_index = 0
                                random.shuffle(c.PHOTO_VARIANTS)
                                time.sleep(settings_result[2])
                                send_msg_reply(event.message_id, event.peer_id, '', f'{c.PHOTO_VARIANTS[photo_index]}')
                                photo_index += 1

        except Exception as e:
            print(repr(e))


def commands():
    while True:
        try:
            for event in longpoll.listen():
                if event.type == VkEventType.MESSAGE_NEW:

                    text = event.text
                    split_text = event.text.split(' ')

                    if split_text[0] in c.hate:
                        if len(split_text) == 2 and split_text[1] in c.hate_message_prefix:
                            if event.user_id in c.u_admins:
                                msg = vk.messages.getById(message_ids=event.message_id)['items'][0]
                                if 'reply_message' in msg:
                                    user = msg['reply_message']['from_id']
                                    if user != c.bot_id:
                                        if not m.is_message_user_hatelisted(user):
                                            message_user_ids.append(user)
                                            m.insert_message_hatelist(user)
                                            send_msg(event.peer_id, '✅ Пользователь добавлен в текстовый хейт лист')
                                        else:
                                            send_msg(event.peer_id, '❎ Пользователь уже находится в текстовом хейт листе')
                                    else:
                                        send_msg(event.peer_id, '❎ Невозможно добавить бота в хейт лист')
                                else:
                                    send_msg(event.peer_id, '❎ Пользователь не указан')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')

                        elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix:
                            if event.user_id in c.u_admins:
                                msg = vk.messages.getById(message_ids=event.message_id)['items'][0]
                                if 'reply_message' in msg:
                                    user = msg['reply_message']['from_id']
                                    if user != c.bot_id:
                                        if not m.is_photo_user_hatelisted(user):
                                            photo_user_ids.append(user)
                                            m.insert_photo_hatelist(user)
                                            send_msg(event.peer_id, '✅ Пользователь добавлен в фото хейт лист')
                                        else:
                                            send_msg(event.peer_id, '❎ Пользователь уже находится в фото хейт листе')
                                    else:
                                        send_msg(event.peer_id, '❎ Невозможно добавить бота в хейт лист')
                                else:
                                    send_msg(event.peer_id, '❎ Пользователь не указан')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')
                        else:
                            send_msg(event.peer_id, '❎ Неверный формат команды')

                    if split_text[0] in c.unhate:
                        if len(split_text) == 2 and split_text[1] in c.hate_message_prefix:
                            if event.user_id in c.u_admins:
                                msg = vk.messages.getById(message_ids=event.message_id)['items'][0]
                                if 'reply_message' in msg:
                                    user = msg['reply_message']['from_id']
                                    if m.is_message_user_hatelisted(user):
                                        message_user_ids.remove(user)
                                        m.delete_message_hatelist(user)
                                        send_msg(event.peer_id, '✅ Пользователь удален из текстового хейт листа')
                                    else:
                                        send_msg(event.peer_id, '❎ Пользователь отсутствует в текстовом хейт листе')
                                else:
                                    send_msg(event.peer_id, '❎ Пользователь не указан')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')

                        elif len(split_text) == 2 and split_text[1] in c.hate_photo_prefix:
                            if event.user_id in c.u_admins:
                                msg = vk.messages.getById(message_ids=event.message_id)['items'][0]
                                if 'reply_message' in msg:
                                    user = msg['reply_message']['from_id']
                                    if m.is_photo_user_hatelisted(user):
                                        photo_user_ids.remove(user)
                                        m.delete_photo_hatelist(user)
                                        send_msg(event.peer_id, '✅ Пользователь удален из фото хейт листа')
                                    else:
                                        send_msg(event.peer_id, '❎ Пользователь отсутствует в фото хейт листе')
                                else:
                                    send_msg(event.peer_id, '❎ Пользователь не указан')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')
                        else:
                            send_msg(event.peer_id, '❎ Неверный формат команды')

                    if split_text[0] in c.cooldown:
                        if len(split_text) == 3 and split_text[1] in c.hate_message_prefix and split_text[2].isnumeric():
                            if event.user_id in c.u_admins:
                                settings_result.pop(1)
                                settings_result.insert(1, int(split_text[2]))
                                m.set_message_cooldown(int(split_text[2]), 1)
                                send_msg(event.peer_id, f'✅ Задержка текста изменена на {split_text[2]} секунд')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')

                        elif len(split_text) == 3 and split_text[1] in c.hate_photo_prefix and split_text[2].isnumeric():
                            if event.user_id in c.u_admins:
                                settings_result.pop(2)
                                settings_result.insert(2, int(split_text[2]))
                                m.set_photo_cooldown(int(split_text[2]), 1)
                                send_msg(event.peer_id, f'✅ Задержка фото изменена на {split_text[2]} секунд')
                            else:
                                choice = random.choice(c.ERRORS)
                                send_msg(event.peer_id, f'{choice}')
                        else:
                            send_msg(event.peer_id, '❎ Неверный формат команды')
        except Exception as e:
            print(repr(e))


if __name__ == '__main__':
    Thread(target=hate, args=[]).start()
    Thread(target=commands, args=[]).start()


标签: pythonapi

解决方案


推荐阅读