python - 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()
解决方案
推荐阅读
- azure - 在 Azure IoT Hub 中,如何查找每个设备 ID 使用的每日配额使用情况(设备到云遥测)?
- python - 在没有安装 pip 的包的情况下在 Conda 环境中运行
- python - 腌制对象并将其加载到 numpy 数组中
- python - py_call_impl 中的错误,当在 R 的 phate 中使用 knn.dist.method = 'precomputed'
- python - 如何使用 Django 对两个以上的表进行连接?
- javascript - req.files keeps returning undefined
- regex - 正则表达式:将接下来的两行(选项卡)放在第一个返回
- python - 完整的 Python 类
- python - 使用理解编辑列表元素会删除部分列表
- macos - 我无法安装diesel-cli 与火箭一起使用