Загрузка...

Шаблон бота ВКонтакте

Тема в разделе Python создана пользователем MALWARE 23 авг 2022. (поднята 18 июл 2025 в 19:12) 3156 просмотров

  1. MALWARE
    MALWARE Автор темы 23 авг 2022 мяукаю 11 977 12 мар 2021
    При создании нового бота гораздо проще использовать шаблон, чем вспоминать, как же правильно все инициировать или копировать с другого бота.

    Шаблон страничного бота:
    Python
    import vk_api
    from vk_api.longpoll import VkLongPoll, VkEventType
    import json

    vk_session = vk_api.VkApi(token='token', api_version=5.131)
    api = vk_session.get_api()
    longpoll = VkLongPoll(vk_session, preload_messages=True)

    print("Бот запущен")
    while True:
    try:
    for event in longpoll.listen():
    if event.type != VkEventType.MESSAGE_NEW and event.type != VkEventType.MESSAGE_EDIT: continue
    message = event.message_data
    # if not message['out']: continue
    # Если нужно, чтобы бот реагировал только на сообщения от хозяина страницы, нужно убрать комментирование на строке выше
    args = message['text'].split(" ")
    cmd = args[0].lower()

    if cmd == '!проверка':
    # Если нужно, чтобы бот редактировал отправленное сообщение: (я буду использовать именно этот способ)
    api.messages.edit(peer_id=message['peer_id'], message_id=message['id'], message='Проверка успешна!', keep_forward_messages=1)
    # Если нужно, чтобы бот отвечал новым сообщением:
    # api.messages.send(peer_id=message['peer_id'], message='Проверка успешна!', random_id=0, forward=json.dumps({'peer_id': message['peer_id'], 'conversation_message_ids': message['conversation_message_id'], 'is_reply': 1}))

    elif cmd == '!напиши':
    api.messages.edit(peer_id=message['peer_id'], message_id=message['id'], message=message['text'].replace(cmd+' ', ''), keep_forward_messages=1)

    elif cmd == '!параметрысбщ':
    api.messages.edit(peer_id=message['peer_id'], message_id=message['id'], message='У сообщения такие параметры:\n'+'\n'.join([str(value)+': '+str(message[value]) for value in message]), keep_forward_messages=1)

    except Exception as e:
    print(e)

    Шаблон бота в сообществе:
    Python
    import vk_api
    from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
    import json

    vk_session = vk_api.VkApi(token='token', api_version=5.131)
    api = vk_session.get_api()
    longpoll = VkBotLongPoll(vk_session, group_id=12345) # тут айди группы без минуса


    print("Бот запущен")
    while True:
    try:
    for event in longpoll.listen():
    if event.type != VkBotEventType.MESSAGE_NEW: continue
    message = event.object.message
    args = message['text'].split(" ")
    cmd = args[0].lower()

    if cmd == '!проверка':
    api.messages.send(peer_id=message['peer_id'], message='Проверка успешна!', random_id=0, forward=json.dumps({'peer_id': message['peer_id'], 'conversation_message_ids': message['conversation_message_id'], 'is_reply': 1}))

    elif cmd == '!напиши':
    api.messages.send(peer_id=message['peer_id'], message=message['text'].replace(cmd+' ', ''), random_id=0, forward=json.dumps({'peer_id': message['peer_id'], 'conversation_message_ids': message['conversation_message_id'], 'is_reply': 1}))

    elif cmd == '!параметрысбщ':
    api.messages.send(peer_id=message['peer_id'], message='У сообщения такие параметры:\n'+'\n'.join([str(value)+': '+str(message[value]) for value in message]), random_id=0, forward=json.dumps({'peer_id': message['peer_id'], 'conversation_message_ids': message['conversation_message_id'], 'is_reply': 1}))

    except Exception as e:
    print(e)
     
    23 авг 2022 Изменено
  2. multi_coder
    multi_coder 23 авг 2022 Заблокирован(а) 236 18 июн 2022
    полезно, спасибо)
     
  3. fixhuman
    Измени cmd на более простые, ибо !параметрысбщ овер неудобно
     
    1. MALWARE Автор темы
      fixhuman, так измени ты, это же шаблон
  4. Sentinel_inactive4366844
    годно конечно, но советую юзать всё же VKBottle тк он удобней)

    Вот шаблон для VKBottle:
    Установим библиотеку:
    pip install vkbottle


    Python
    import logging
    from vkbottle.bot import Bot, Message
    from vkbottle import GroupEventType, GroupTypes, Keyboard, Text, KeyboardButtonColor, VKAPIError, Callback

    # Логирование
    logging.basicConfig(level="DEBUG")

    # Токен
    bot = Bot(token="токен бота")

    # A = a | Z = z | Игнорирование регистра
    bot.labeler.vbml_ignore_case = True

    # это наша клавиатура
    keyboard_1 = Keyboard(one_time=False, inline=False)
    keyboard_1.add(Text("Клавиша 1"), color=KeyboardButtonColor.POSITIVE)
    keyboard_1.row()
    keyboard_1.add(Text("Клавиша 2"), color=KeyboardButtonColor.NEGATIVE)

    """
    Существует несколько видов куда бот может отвечать:
    .message - обрабатывает сообщения и из бесед и из личных переписок
    .private_message - обрабатывает сообщения только из личных переписок
    .chat_message - обрабатывает сообщения только из бесед
    """
    @bot.on.private_message(text="Привет")
    async def hi_handler(message: Message):
    users_info = await bot.api.users.get(message.from_id)
    await message.answer("Привет, {}.".format(users_info[0].first_name))

    # Скидываем клавиатуру
    @bot.on.private_message(text="Клавиатура")
    async def keyboard_handler(message: Message):
    await message.answer("Отправил клавиатуру:", keyboard=keyboard_1.get_json())

    # Запускаем бота в бесконечность
    bot.run_forever()
    Сама библиотека же: https://github.com/vkbottle/vkbottle
     
    1. MALWARE Автор темы
      Sentinel_inactive4366844, не скажу, что он удобнее: из асинхронных функций хрен ты вызовешь обычные:finger_down:
    2. Sentinel_inactive4366844
      MALWARE, ну да, возможно куда лучше когда код синхронный))) (НЕТ)
    3. HeartlessReborn
  5. AndyPanda
    годно коротко ясно то что нам нужно спасибо
     
  6. llimonix
    llimonix 27 сен 2024 :peace: make testers great again! 23 810 20 янв 2020
    Пора бы обновлять шаблончик и расширяться со всеми приколюхами ботов ВКонтакте
     
  7. Корги
    Корги 20 май 2025 Играет в Visual Studio Code... 8994 23 сен 2022
    интересненько и полезно
     
Загрузка...
Top