Боты для беседы в вк: «Лучший чат-бот для беседы вконтакте?» — Яндекс Кью

Содержание

Боты — Бот для VK (самообучающийся) — для беседы. | OFF-BOT.RU

ADMIN

off-bot.ru/account/upgrades

  • Автор темы
  • #1

Бот вконтакте, который обучается в беседе (может и в лс кстати!) на сообщениях юзера, а потом рандомно генерирует какую-то чушь. Бот довольно interesting. Хранятся сообщения в формате txt.

Установить библиотеки:

Код:

pip3 install https://github.com/timoniq/vkbottle/archive/v2.0.zip --upgrade
pip3 install mc.py

Что нужно изменить в коде?

Изменяем переменную groupid на цифровой айдишник вашей группы, указываем токен.

Если вы ему пишите новые слова (которые он ещё не запомнил) — то он вас игнорит и записывает их
Но если кто-то (вы или кто нить другой) скажет любое слово из которых он записал уже — он ответит.

Ссылка на скачивание:

Пожалуйста Авторизуйтесь или Зарегистрируйтесь чтобы просмотреть скрытую ссылку


 

fResh

Новичок

  • #2

Топовый бот

 

Mury0nych2

Новичок

  • #3

Как сделать чтобы он всегда что-то отвечал? По типу бота сглыпа

 

l1v0n

Эксперт

02.04.21

  • #4

Ахахах, все команды и текст в них — мой, помню это писал, а так, нормальная, оригинальная версия бота —

Пожалуйста Авторизуйтесь или Зарегистрируйтесь чтобы просмотреть скрытую ссылку


 

Mury0nych2

Новичок

  • #5

l1v0n написал(а):

Ахахах, все команды и текст в них — мой, помню это писал, а так, нормальная, оригинальная версия бота —

Пожалуйста Авторизуйтесь или Зарегистрируйтесь чтобы просмотреть скрытую ссылку


Нажмите для раскрытия…

Не могу запустить(

 

Cherepanov

Новичок

  • #6

хочу нод жс

 

Fight

Новичок

  • #7

🙂

Авто объединение сообщений:

Ну что говорить

Авто объединение сообщений:

08.05.21

Ну что говорить

Авто объединение сообщений:

Понимаю

 

bobinete

Новичок

  • #8

А можно более подробную инструкцию)

 

Torchik

Новичок

  • #9

А можно такой для телеграма?

 

Chivij

Новичок

  • #10

Torchik написал(а):

А можно такой для телеграма?

Нажмите для раскрытия…

Есть такой для телеги, Игнат зовут.

Пожалуйста Авторизуйтесь или Зарегистрируйтесь чтобы просмотреть скрытую ссылку


 

ToChill

Новичок

  • #11

# python main.


SyntaxError: invalid syntax

Нажмите для раскрытия…

что делать с этим?
установил все что требовалось

 

h5K3R

Прохожий

  • #13

куда примеры с ответами закидывать и в каком формате, можно подробнее вообще?

 

ergeerfafafaf

Новичок

12.21″ data-time-string=»20:13″ title=»21.12.21 в 20:13″>21.12.21

  • #14

скажите ему спасибо.

 

Rex_3000

Новичок

  • #15

Cherepanov написал(а):

хочу нод жс

Нажмите для раскрытия…

++++

 

1TsToPn1cK

Новичок

  • #16

Inferno333

Новичок

  • #17

круто

 

Алек

Новичок

  • #18

 

Бот-викторина для ВКонтакта

Администраторам сообществ по «Смешарикам»

Пожалуйста, не используйте этого бота в своих пабликах — пусть это будет нашей изюминкой.


Введение


Месяца три назад мы с друзьями по сети «ВКонтакте» в общем чате (беседе) играли в угадайку — игру по мультфильму «Смешарики», который мы все любим. Правила: ведущий пишет цитаты персонажей мультика, игроки угадывают из какой серии эта цитата. Я решил сделать игру более интересной, и назначить на роль ведущего бота.

Создание группы

Для того, чтобы создать группу или же сообщество для нашего бота, нужно зайти в раздел «Сообщества» в ВКонтакте и нажать на кнопку «Создать сообщество» в правом верхнем углу.

Выбираем тип сообщества «Группа по интересам».

Придумываем название, выбираем тематику, тип группы оставляем открытой.

Теперь нам потребуется узнать ID и создать токен группы.

Если же ID можно узнать в адресной строке после слова «club», то с токеном нужно будет немного запариться.

Заходим в управление группой:

Выбираем раздел «Работа с API» и включаем там «Long Poll API» для работы бота.

Далее переходим в «Ключи доступа», создаём ключ доступа с такими настройками:

Получившийся ключ доступа и есть наш токен:

Осталось разве что разрешить добавлять группу в беседы.

Заходим в раздел «Сообщения -> Настройки для бота», включаем «Возможности ботов» и жмем на «Разрешить добавлять сообщество в беседы». Сохраняем.

Установка модуля vk_api

Для того, чтобы установить модуль для работы с «Вконтакте API» нужно прописать в командную строку следующую команду:

pip3 install vk_api

Ещё нужно создать в директории бота файл «points.pickle».

Базовые функции

Переходим к программной части:
Подключаем нужные плагины: pickle, random, requests и библиотеку vk_api, благодаря которой можно работать с «ВКонтакте».

import random
import pickle
import requests
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType 
#подключаемся к BotLongpoll - он нам нужен для работы именно с беседами. 

Создаем словарь с цитатами и словари для хранения информации:

series = {"серия":["цитата 1", "цитата 2"], "серия":["цитата 1", "цитата 2"]}
series_in_chats = {} 
quotes_in_chats = {}
points = {}

Сами цитаты заключены в списки в ключах словаря «series» для того, чтобы на одну серию приходилось много цитат.

Переменная «series_in_chats» нужна для хранения информации о серии в отдельной беседе, переменная «quotes_in_chats» аналогично, только для хранения информации о цитате.

Теперь подключаемся к группе:

vk_session = vk_api.VkApi(token="Ваш токен") #токен и ID группы
longpoll = VkBotLongPoll(vk_session, "ID Вашей группы") #мы нашли ранее
vk = vk_session.get_api()

Можно создать функцию для более удобной отправки сообщений:

def send(ch_id, msg):
    vk.messages.send(chat_id=ch_id, random_id=random.randint(1, 9999999), message=msg)

Аргументы:

ch_id #определяет ID чата, в который нужно отправить сообщение
msg #определяет само сообщение
vk. messages.send(chat_id, random_id, message)

Метод для отправки сообщений.

Обязательные параметры:

chat_id - ID чата, из которого прилетело сообщение,
random_id - случайный идентификатор сообщения, если честно сам не очень понимаю что это,
message - текст сообщения.

Подробнее о методе тут.

Обработка сообщений

while True: #бесконечный цикл
    try: 
        for event in longpoll.listen():
	    if event.type == VkBotEventType.MESSAGE_NEW and event.from_chat:
		chat_id = int(event.chat_id) #ID чата, из которого пришло сообщение
                text = event.object.text.lower() #текст сообщения
                man = event.obj.from_id #ID человека или группы, написавшего сообщение
                if chat_id not in series_in_chats:
                    episode = random.choice(series.keys()) #выбираем случайную серию 
                    #из ключей словаря
                    quote = random. choice(series.get(episode)) #выбираем случайную цитату из 
                    #значения серии
                    series_in_chats.update({chat_id:episode}) #обновляем словарь для хранения
                    quotes_in_chats.update({chat_id:quote}) #обновляем словарь для хранения
                    #мы написали этот раздел для того, чтобы в каждой беседе  
                    #была своя серия и цитата из неё.
    except:
        continue
        #конструкция try except - если вдруг случится какая-нибудь ошибка
        #бот не сломается, а продолжит работу

Теперь мы можем обрабатывать сообщения полученные группой, отправлять сообщения от имени группы и многое другое.

Внедряем очки

Этот код нужно вставить после проверки «if chat_id not in series_in_chats»:

                if points == {}:
                    with open('points.pickle', 'wb') as f:
                        pickle.dump(points, f)
                    with open('points. pickle', 'rb') as f:
                        
                        points = pickle.load(f) 
                if isinstance(points.get(man), int) == False:
                    points.update({man:0})
                    with open('data.pickle', 'wb') as f:
                        pickle.dump(points, f)
                        #если человека нет в словаре points
                        #мы его туда добавляем
                       

Угадайка

Делаем проверку: если полученное в беседе сообщение будет равняться слову «угадайка», бот будет отвечать цитатой, которую нужно угадать (все это после проверки «if isinstance»):

if text == "угадайка":
    send(chat_id, "Отгадайте, из какой серии эта цитата: "+ quotes_in_chats.get(chat_id))

Осталось только сделать проверку на правильность серии — если в сообщении будет присутствовать название серии, бот ответит, что серия была угадана:

if series_in_chats. get(chat_id) in text:
    
    send(chat_id, "Вы ответили верно!")
    points.update({man:points.get(man)+1}) #прибавляем 1 балл
    
    with open('points.pickle', 'wb') as f:
        pickle.dump(points, f) #сохраняем информацию об очках в файл
    send(chat_id, "Вы ответили верно!\nУ вас столько очков: "+str(points.get(man)))
    #меняем цитату и серию:
    episode = random.choice(series.keys()) #выбираем случайную серию 
    #из ключей словаря
    quote = random.choice(series.get(episode)) #выбираем случайную цитату из 
    #значения серии
    series_in_chats.update({chat_id:episode}) #обновляем словарь для хранения
    quotes_in_chats.update({chat_id:quote}) #обновляем словарь для хранения
    

Заключение

По итогу, бот будет работать как-то так:

Разумеется, на этой основе можно создать практически любого бота — не только угадайку.

Созданный бот можно увидеть в сообществе ВКонтакте «Обитель Квестов | Смешарики».

Он, кстати, работает не только в чатах, но и в личных сообщениях.

А ещё в нем есть несколько штучек, о которых я здесь не рассказал.

[VK] MikeBot | Страница 3

AlMino
Участник

random_idуникальный (в привязке к API_ID и ID отправителя) идентификатор, предназначенный для предотвращения повторной отправки одинакового сообщения. Сохраняется вместе с сообщением и доступен в истории сообщений.

Заданный random_id используется для проверки уникальности за всю историю сообщений, поэтому используйте большой диапазон (до int32).