Такс, мини гайдик для тебя.
Я node.js/javascript и тд не знаю, сделаю на python`e
Первым делом хостинг, у меня python. Я беру pythonanywhere.com (noad)
После тебе нужна заготовка для бота
import vk_api
import random
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
#активация бота в вк
token = "токен"
vk = vk_api.VkApi(token=token)
vk._auth_token()
longpoll = VkBotLongPoll(vk, 'номер группы')
#--------------------------------------------
try:
while True:
for event in longpoll.listen(): #читаем все сообщения
#если новое сообщение
if event.type == VkBotEventType.MESSAGE_NEW:
request = event.obj['text'] #переменная с тектом сообщения
peer_id = event.obj['peer_id'] #id чата или пользователя
if request == "Привет": #если текст сообщения "Привет", пишем в ответ Привет!
vk.method("messages.send", { "peer_id": peer_id, "message": "Привет!", "random_id": random.randint(1, 2147483647)})
except:
print("Error") #это просто система "дебага", я ее сюда запихал чтобы бот не крашил и не останавливался
Это просто мини бот для вк, для создания чат-бота, нам нужна sql.
#Простая SQL для чат бота
import sqlite3
conn = sqlite3.connect('tst.db')
cur = conn.cursor()
cur.execute('create table if not exists tbl(ask text,answ text)') #создаем базу вопрос/ответ
while True:
asked = input('Вопрос: ') #просим ввод вопроса например "Привет"
if not asked: #если пусто, остановка
break
cur.execute('select answ from tbl where ask==?',(asked,))
answer = [i[0] for i in cur.fetchall()] #перечисляем все ответы
if not answer:
answers = input("Ответ: ")
if not answers: continue #если пусто, продолжаем задавать вопросы
cur.execute('insert into tbl values(?,?)',(asked,answers)) #добавляем вопрос и ответ к нему
else: #иначе выводим ответ
print('Ответ бота: {0}'.format(*answer))
conn.close() #отключаемся от базы
Теперь преобразуем все в одно.
import vk_api
import sqlite3
import random
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
#активация бота в вк
token = "токен"
vk = vk_api.VkApi(token=token)
vk._auth_token()
longpoll = VkBotLongPoll(vk, 'номер группы')
#--------------------------------------------
conn = sqlite3.connect('bot.db')
cur = conn.cursor()
cur.execute('create table if not exists tbl(ask text,answ text)')
try:
while True:
for event in longpoll.listen(): #читаем все сообщения
#если новое сообщение
if event.type == VkBotEventType.MESSAGE_NEW:
request = event.obj['text'] #переменная с тектом сообщения
peer_id = event.obj['peer_id'] #id чата или пользователя
if request == "Привет":
vk.method("messages.send", { "peer_id": peer_id, "message": "Привет!", "random_id": random.randint(1, 2147483647)})
if request == "Старт" or request == "Начать":
vk.method("messages.send", { "peer_id": peer_id, "message": "Привет! Я обучаемый бот! Напиши любой вопрос, а после ответ!", "random_id": random.randint(1, 2147483647)})
cur.execute('select answ from tbl where ask==?',(request,))
answers = [i[0] for i in cur.fetchall()]
if not answers:
a = request
if not a: continue
cur.execute('insert into tbl values(?,?)',(request,a))
else:
vk.method("messages.send", { "peer_id": peer_id, "message": "Ответ: {0}".format(*answer), "random_id": random.randint(1, 2147483647)})
except:
print("Error")
conn.close()
P.S.: В последнем коде есть некая антипаста (нет, мне просто лень придумывать как сохранить 1 реквест)
Вообщем нужно пофиксить сэйв вопроса/ответа, а так все норм.
скрин "работы"