• Как сделать проверку на присутствие в беседе?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Для начала
    в беседе с peer_id = 3

    ID всех бесед начинаются с 2000000000, id=3 - пользователь

    Потом, messages.getConversationMembers возращает список словарей в items, так что проверить через if uid in check_kf(3): нельзя.

    https://vk.com/dev/messages.getConversationMembers

    И плюсом ко всему этому, функция check_kf ничего не возвращает, так что ее нужно доделать
    def check_kf(peer_id:int) -> list:
      return authorize.method("messages.getConversationMembers", {
            "peer_id": peer_id
        })["items"]


    Как-то так
    def add_v_besedy(sender,uid):
      uid = reseived_message[10:19]
      user_id = uid
      users = check_kf(2000000003)
      for user in users:
        if user['member_id']  == user_id:
          write_message(sender,'text')
          return
      write_message(sender,'as')


    Ну и в reseived_message[10:19] явно что-то не так
    Ответ написан
    Комментировать
  • Как сделать проверку на присутствие в беседе?

    @CleanyBoom
    На самом деле ты просто не возвращаешь ничего из функции, из этого и ошибка, ведь нельзя проверить наличие юзера в списке, если этого списка не существует

    def check_kf(peer_id:int) -> list:
      return authorize.method("messages.getConversationMembers", {
            "peer_id": peer_id
        })["items"]
    Ответ написан
    Комментировать
  • Как сделать бота,читающего сообщение вк?

    WolfInChains
    @WolfInChains
    Через longpoll. Но чтобы отвечал только в лс нужно проверять еще откуда приходит ивент, этот вариант и в беседу будет отвечать. Я уже не помню точно как там сделать проверку (но вроде как добавить if event.from_user: после команды / строки if event.type == VkEventType.MESSAGE_NEW:), в интернете примеров куча.

    from vk_api.longpoll import VkLongPoll, VkEventType
    
    vk_session = vk_api.VkApi(token="токен от страницы")
    longpoll = VkLongPoll(vk_session)
    vk = vk_session.get_api()
    
    
    def send_msg(peer_id: int, message: str, attachment: str = ""):
        return vk.messages.send(**locals(), random_id=0)
    
    
    for event in longpoll.listen():
        if event.type == VkEventType.MESSAGE_NEW:		
            # если вообще на любое сообщение, то убираем строку if event.text == 'текст который пишет пользователь': 
            if event.text == 'текст который пишет пользователь': 
                send_msg(event.peer_id, 'ответ бота')
    Ответ написан
    Комментировать
  • Как вывести несколько строчек sqlite в одно сообщение vk py?

    def vivod_inf():
      o = ""
      for i in sql.execute(f"SELECT id,nick,dostyp FROM users"):
          o += f"{i[0]}({i[1]}), уровень доступа - {i[2]}\n"
      write_message(sender, o)
    Ответ написан
    Комментировать
  • Анти-слив система, почему не работает код?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Зачем вы сделали
    member = discord.Member
    ?

    Все роли человека лежат в
    after.roles

    Если вам нужно блокировать определенную роль, нужно сначала получить ее, затем через for просмотреть новый список ролей человек, и если среди них есть нужная вам - удалить ее
    for role in after.roles:
        if role.mention == bad_role:
            await member.remove_roles(bad_role)


    Работа с ролями - Как добавить пару функций в on_member_update?
    Ответ написан
    1 комментарий