Python 3.8.2 | VkBotLongPoll 5.103 Чат-бот ВК. Нужно сделать команду для смены ника любому пользователю
Делаю бота на VkBotLongPoll. Нужно сделать команду типа: Бот дай ник !<старый_ник>:<новый_ник> Пример: бот дай ник !HaX:ded Он находит в базе данных пользователя с ником HaX и заменяет его на ник ded.
import random
import requests
from bs4 import BeautifulSoup
import sqlite3
from vk_api import VkApi
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
vk_session = VkApi(token="Тут Токен")
longpoll = VkBotLongPoll(vk_session, "Тут id")
vk = vk_session.get_api()
conn = sqlite3.connect("db.db")
c = conn.cursor()
session = requests.Session()
def set_user_state(user_id, state):
c.execute("UPDATE users SET state = '%s' WHERE user_id = %d" % (state, user_id))
conn.commit()
for event in longpoll.listen():
if event.type == VkBotEventType.MESSAGE_NEW and "key" in event.message.text.lower(): #"key" in event.message.text.lower() чтобы бот отзывался только когда в сообщении есть ключевое слово
if "key дай ник" in event.message.text:
spisak = []
spisok = []
with conn:
c.execute("SELECT * FROM users")
rows = c.fetchall()
print(rows) #выводит данные таблицы
for raw in rows:
pash = str(raw[0])
spisak.append(pash)
print(spisak) #выводит все id
for row in rows:
push = str(row[1])
spisok.append(push)
print(spisok) #выводит все ники
texts = event.message.text[event.message.text.find("!") + 1 : ]
texts = texts.rsplit(':', 2)
texts = texts[0]
print(texts) #выводит HaX из "key дай ник !HaX:ded"
texte = event.message.text[event.message.text.find(":") + 1 : ]
print(texte) #выводит ded из "key дай ник !HaX:ded"
if texts in spisok:
print("1") #выводит 1 если в базе данных есть пользователь с ником HaX
set_user_state(event.obj['message']['from_id'], texte)
vk.messages.send(
peer_id = event.obj['message']['peer_id'],
message="Ник успешно изменён",
random_id=random.randint(1, 10000))
Проблема: Бот меняет ник только мне Чем нужно заменить?: event.obj['message']['from_id'] в set_user_state(event.obj['message']['from_id'], texte)
Ответы (1 шт):
Автор решения: Юрий Леонов
→ Ссылка
Извиняюсь, забыл про существование метода index.
if "дай ник" in event.message.text.lower():
spisak = []
spisok = []
with conn:
c.execute("SELECT * FROM users")
rows = c.fetchall()
for raw in rows:
pash = str(raw[0])
spisak.append(pash)
for row in rows:
push = str(row[1])
spisok.append(push)
texts = event.message.text[event.message.text.find("!") + 1 : ]
texts = texts.rsplit(':', 2)
texts = texts[0]
texte = event.message.text[event.message.text.find(":") + 1 : ]
if texts in spisok:
indx = spisok.index(texts)
set_user_state(int(spisak[indx]), texte)
vk.messages.send(
peer_id = event.obj['message']['peer_id'],
message="Ник успешно изменён",
random_id=random.randint(1, 10000))