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))
→ Ссылка