Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 02.07.2019, 23:54   #1
1xev3
Новичок
Джуниор
 
Регистрация: 02.07.2019
Сообщений: 2
По умолчанию Vk bot. Бот работает неккорректно.бот отвечает всегда одним сообщением вне зависимости от комманды.

Незнаю как обьяснить данную проблему,но код который я создал ведёт
себя странно при добавлении разных вариаций
комманд.Старички,подскажите что не так.Всё что не хотел бы спалить заменил на test.Странность заключается в том что после добавления в код or бот отвечает всегда одним сообщением вне зависимости от комманды
скриншоты:
http://prntscr.com/o9pgtl

Код:
import vk_api
import random
import time

token = "test"

vk = vk_api.VkApi(token="test")

vk._auth_token()

while True:
    try:
        messages = vk.method("messages.getConversations", {"offset": 0, "count": 20, "filter": "unanswered"})
        if messages["count"] >= 1:
            id = messages["items"][0]["last_message"]["from_id"]
            body = messages["items"][0]["last_message"]["text"]
            if body.lower() == "hello" or "q" or "qq" or "привет" or "ghbdtn": #Проблемная строка
                vk.method("messages.send", {"peer_id": id, "message": "Привет!Я бот созданный 1xev3.Если пишешь ради вопроса - проигнорируй ответ бота","random_id": random.randint(1, 2147483647)})
            elif body.lower() == "ссылки" or "ccskrb": #Проблемная строка
                vk.method("messages.send", {"peer_id": id, "message": "Discord:  \n test \n test \n Группа ВК: test \n test \n test:  ", "random_id": random.randint(1, 2147483647)})
            elif body.lower() == "беседа": #Дальше не стал делать or
                vk.method("messages.send", {"peer_id": id, "message": "Ссылка на беседу: test", "random_id": random.randint(1, 2147483647)})
            elif body.lower() == "ники":
                vk.method("messages.send", {"peer_id": id, "message": "test", "random_id": random.randint(1, 2147483647)})
            else:
                vk.method("messages.send", {"peer_id": id, "message": "Не понял тебя.Если пишешь ради вопроса - проигнорируй ответ бота.Чтобы отправить мне комманду напиши её сообщением(Без # )\nМои комманды: #ссылки# , #беседа# , #ники#", "random_id": random.randint(1, 2147483647)})
    except Exception as E:
        time.sleep(1)
#Код сам по себе запускается без ошибок

Последний раз редактировалось 1xev3; 03.07.2019 в 00:27. Причина: Изменение заголовка
1xev3 вне форума Ответить с цитированием
Старый 03.07.2019, 05:10   #2
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 5,429
По умолчанию

Код:
body = messages["items"][0]["last_message"]["text"].lower()
if body in ("hello", "q", "qq", "привет", "ghbdtn"):
    ...
elif body in (...):
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.07.2019, 05:13   #3
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,651
По умолчанию

or работает не так, как Вы думаете.. Ваша строка
Код:
if body.lower() == "hello" or "q" or "qq" or "привет" or "ghbdtn":
на самом деле читается так:
Код:
if (body.lower() == "hello") or ("q") or ("qq") or ("привет") or ("ghbdtn"):
Строки непустые => обрабатываются Питоном как True => or даёт True

Я бы написал
Код:
if body.lower() in ["hello", "q", "qq", "привет", "ghbdtn"]:
Black Fregat вне форума Ответить с цитированием
Старый 03.07.2019, 13:33   #4
1xev3
Новичок
Джуниор
 
Регистрация: 02.07.2019
Сообщений: 2
По умолчанию

Спасибо,помогли.
1xev3 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QUdpSocket работает только при локальном IP. Не работает если указан динамичесский айпи kook163 Qt и кроссплатформенное программирование С/С++ 5 09.05.2018 23:40
Не работает анимация. Механизм работает лишь при изменения числа в едит1. Студент ММИ Помощь студентам 1 18.05.2015 08:39
Программа на Visual C# работает при запуске руками, но не работает при попытки автоматического запуска Bug$ Помощь студентам 18 21.10.2013 16:22
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 10:56


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS