Местоположение
Казахстан

Наибольший вклад в теги

Все теги (5)

Лучшие ответы пользователя

Все ответы (20)
  • Как справиться с периодической неотправкой сообщений при использовании vk_api?

    @RINAMI
    Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
    Толком не понял чего вы хотите, но чтобы отправить сообщение от имени группы пользователю, нужно чтобы он написал вам первым, а так, вот написал вам скрипт простого бота:
    import vk_api
    token = ""
    id_group = айди_группы
    vk = vk_api.VkApi(token=token)
    longpoll = VkBotLongPoll(vk, id_group)
    getting_api = vk.get_api()
    
    def otpravitel(id, message):
          vk.method("messages.send", {"user_id": id, "message": text, 'random_id': 0})
    
    while True:
         for event in longpoll.listen():
            if event.type == VkBotEventType.MESSAGE_NEW:
              if event.from_user:
                 id = event.object.message['from_id']
                 mes = event.object.message['text']
                 if mes == 'Привет, как дела?'
                    otpravitel(id, 'Привет, отлично, у тебя?')
                 else:
                    otpravitel(id, 'Я не понял вас')
         continue

    Зачем столь напрягаться если просто можно взглянуть в документацию? Или посмотреть роликов на ютубе?
    P.S советую использовать BotsLongPoll для работы ТОЛЬКО в беседах, UserLongPoll для пользователей.
    Ответ написан
    4 комментария
  • Как дать боту возможность одновременно ждать сообщения от пользователя и проверять время для запланированного вывода сообщения?

    @RINAMI
    Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
    Для того чтобы планировать задачи для своего кода, нужен schedule
    Пример:
    import schedule
    def primer():
          #func options
         schedule.every().day.at('8:00').do(primer)
         while True:
                schedule.run_pending()
                time.sleep(3)


    Чтобы бот делал все как вы хотите, создайте два потока пример:
    import threading
    from threading import Thread
    def thread2():
          thr2 = Thread(target=primer)
          thr2.start()


    В конец кода добавьте:
    if __name__ == '__main__':
        thread2()


    Итог:
    Функции которые вам нужны, будут выполнятся в основном потоке, а в потоке номер 2 будет выполнятся schedule.
    Ответ написан
    Комментировать
  • Vk_api TypeError: __call__() takes 1 positional argument but 3 were given, во время получения имени по id возникает ошибка, что делать?

    @RINAMI
    Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
    Добрый день, вы указываете переменную после ее использования, попробуйте так:
    import vk_api, vk
    from vk_api.keyboard import VkKeyboard, VkKeyboardColor
    from vk_api.utils import get_random_id
    from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
    vk = authorize.get_api()
    authorize = vk_api.VkApi(token='ad6d1569fcd231ba7bb3af6d021144dc81a88d111111111111d5f0016a0ff5448c1ca33d649a2789b6975')
    longpoll = VkBotLongPoll(authorize, group_id=206090038)


    Как я понял, вам нужно получить имя и фамилию пользователя, в таком случае стоит сделать так:
    def take_name(from_id)
         if from_id > 0:
            sender_info = getting_api.users.get(user_ids=from_id)[0]
            full_name = sender_info.get('first_name') + ' ' + sender_info['last_name']
            return full_name
            pass

    P.S лучше переименуйте vk в что-нибудь другое, например getting_api
    В итоге получится getting_api = vk.get_api()
    Ответ написан
    2 комментария
  • Как получить id пользователя с помощью vk_api & longpoll в беседе вк, на Python?

    @RINAMI
    Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
    О боже, что я только что увидел, господа, запомните раз и навсегда: VkLongPoll- ТОЛЬКО для работы в ЛС, BotsLongPoll - в беседе. Еще, если вы хотите сделать профиль для каждого пользователя, то вам нужна база данных, (смотря что хотите написать в профиль)
    Пример реализации того чего вы хотите на BotsLongPoll:
    import time
    get_name(from_id):  # Имя Фамилия пользователя
        if from_id > 0:
            sender_info = getting_api.users.get(user_ids=from_id)[0]
            full_name = sender_info.get('first_name') + ' ' + sender_info['last_name']
            return full_name
            pass
    def profilesender(id, text)
          vk.method('messages.send', {'chat_id': id, 'message': text, 'random_id': 0})
    def chatsender(id, text):
          vk.method('messages.send', {'chat_id': id, 'message': text, 'random_id': 0})
    for event in longpoll.listen():
        if event.type == VkBotEventType.MESSAGE_NEW:
           if event.from_chat:
              user_id = event.object.message['from_id']
              mes = event.object.message['text']
              if mes == 'профиль':
                 vremya = '⏰Текущее время беседы:⏰\n'  + str(time.asctime()) + '\n'
                 chat = event.chat_id + '\n' #можете указать ид вашего чата
                 user_name = get_name(from_id)
                 chatsender(id, 'Вот ваш профиль\n' + '@id' + user_id)
                 profilesender(id, 'Имя:' + user_name + '\n' + vremya + chat +)

    P.S я незнаю что вы хотите добавить в профиль пользователя, но это был пример, вообще, для этого нужно создать класс, но если вы хотите узнать айди пользователя, не нужно создавать функцию, достаточно написать:
    event.object.message['from_id']
    Ответ написан
    Комментировать
  • Как написать бота для вк с функциями администрирования беседы, а именно кик, бан, мут и предупреждение?

    @RINAMI
    Занимаюсь монтажом и дизайном. PSD,AEX,VEG.
    Функция кика реализуется очень просто:
    def kicker(id):
         vk.method("messages.removeChatUser", {'chat_id': id, 'user_id': mes.split(' ')[1]})
    #Вызов
     if mes.split(' ')[0] == 'кик':
        mes = event.object.message['text']
        id = event.chat_id
        kicker(id)

    Насчёт бана мута и предупреждений. Чтобы реализовать функцию бана потребуется txt файл, пример:
    Добавляете айди пользователя в txt файл и проверяете:
    #Функция бана
    def ban(id, user_id):
          vk.method("messages.removeChatUser", {'chat_id': id, 'user_id': user_id})
    check = open('имя_файла', 'r')
    recheck = check.read()
    user_id = event.object.message['from_id']
    if user_id in recheck :
           ban(id, user_id)

    ЛИБО:
    Создаём проверку на вступления участника в беседу и новую функцию:
    def banagain(id, rinvite_id)
          vk.method("messages.removeChatUser", {'chat_id': id, 'user_id': rinvite_id})
                    try:
                        rin = event.message.action['type']
                        rinvite_id = event.message.action['member_id'] 
                    except:
                        rinvite_id = -100
                        rin = ''
                   if rin == 'chat_invite_user':
                      if rinvite_id in recheck:
                              banagain(id, rinvite_id)

    Методы "предов" и мута делаются почти точно также, но там нужен модуль time, да и саму функцию бана можно реализовать с использованием модуля datetime.
    P.S с помощью User Long Poll можно сделать так чтобы после бана пользователя уведомляло об этом. Также можно добавлять пользователя в список забаненных с помощью взаимодействия с файлами, можешь почитать тут
    Ответ написан
    Комментировать