Ответы пользователя по тегу ВКонтакте
  • Почему бот не хочет реагировать в беседах?

    drygdryg
    @drygdryg
    Python-разработчик
    ...
            if event.from_user and not event.from_me and event.text.startswith('/mchatgpt'):
    ...

    Здесь вы проверяете, что сообщение пришло от пользователя. Если сообщение пришло из беседы, то event.from_user == False. Можно сделать так:

    ...
            if ((event.from_user or event.from_chat) and not event.from_me) and event.text.startswith('/mchatgpt'):
    ...


    Если вы создаёте чат-ботов для ВКонтакте, то советую обратить внимание на фреймворк vkbottle: https://github.com/vkbottle/vkbottle
    Ответ написан
    Комментировать
  • Можно ли отправить пост в предложку группы VK используя access token?

    drygdryg
    @drygdryg
    Python-разработчик
    Предложить запись на стене можно с использованием метода API wall.post. В документации указано, что этот метод можно вызвать с использованием с ключом доступа пользователя (access token), полученным в Standalone-приложении через Implicit Flow.
    Существует также неофициальный, на мой взгляд, более простой способ получения ключа доступа через известные приложения ВК (VK Admin, Kate Mobile и пр.), но используйте его на свой страх и риск: https://vkhost.github.io/
    Ответ написан
  • Python, VKBottle, SQL. Как ограничить доступ к команде на время?

    drygdryg
    @drygdryg
    Python-разработчик
    В этой строке метод fetchone() возвращает один результат в виде кортежа полей, в вашем случае состоящего из одного элемента — значения поля time:
    last_command_use_time = cursor.fetchone()
    Поэтому вы можете извлечь из него первый элемент и положить его в last_command_use_time:
    last_command_use_time = cursor.fetchone()[0]
    Никогда не используйте f-строки или иной способ форматирования для подстановки значений в SQL-запросы: это может вызвать проблемы с безопасностью приложения. Как верно отметил Vindicar, лучше использовать средства вашего драйвера СУБД для подстановки параметров в запросы (parametrized quieries).
    К тому же, для ограничения частоты выполнения каких-либо действий в вашем приложении обычно лучше использовать решения на базе быстрых хранилищ "ключ-значение" вроде Redis или Memcached, чем на базе реляционных СУБД (коей является PostgreSQL).
    Советую обратить внимание на инструмент PyrateLimiter: он обеспечивает ограничение частоты выполнения функции (либо корутины, что может быть полезным в вашем случае) и в качестве хранилища может использовать оперативную память (queue.Queue), Redis или SQLite.
    Ответ написан
  • Vkbottle Python Bot?

    drygdryg
    @drygdryg
    Python-разработчик
    Для периодического выполнения какого-либо действия можно использовать планировщик/очередь задач в вашем проекте, например, APScheduler, Celery или schedule.
    Ответ написан
    Комментировать
  • Как проверять сообщения vk_api?

    drygdryg
    @drygdryg
    Python-разработчик
    Можно использовать user long poll API для получения новых сообщений в реальном времени. Он реализован в vk_api. Получать сообщения, которые были отправлены аккаунтом, на котором запущен юзербот, и изменять их можно так:
    import vk_api
    from vk_api.longpoll import VkLongPoll, VkEventType
    
    
    vk_session = vk_api.VkApi('+71234567890', 'password')
    vk_session.auth()
    vk = vk_session.get_api()
    longpoll = VkLongPoll(vk_session)
    
    for event in filter(lambda e: e.type == VkEventType.MESSAGE_NEW and e.from_me, longpoll.listen()):
        text = event.text
        if text.startswith('!погода'):
            vk.messages.edit(
                message_id=event.message_id, peer_id=event.peer_id,
                message='☀ Сегодня солнечно, 27°C'
            )

    Если нужно получать все сообщения, то просто убрать e.from_me:
    ...
    for event in filter(lambda e: e.type == VkEventType.MESSAGE_NEW, longpoll.listen()):
    ...


    Ещё, может быть, вам стоит попробовать vkbottle — фреймворк VK API, предназначенный, в первую очередь, для разработки ботов.
    Ответ написан
  • Как сделать репост записей из сообщества на vkbottle?

    drygdryg
    @drygdryg
    Python-разработчик
    Если вы являетесь администратором целевого сообщества, то можете получать новые посты со стены в реальном времени с помощью Bots Long Poll API либо Callback API.
    Если вы не администратор этого сообщества, то можно просто периодически проверять его стену на наличие новых постов через классический API с помощью метода wall.get и делать репосты новых постов с помощью wall.repost.
    Вышеуказанные API в Python можно использовать с пакетом vk_api.
    Ответ написан
    Комментировать