Giter Site home page Giter Site logo

chat-wars-bot's Introduction

Chat-Wars-Bot

Бот для текстовой мморпг Chat Wars в Telegram
НЕ ПЫТАЙТЕСЬ СКОМПИЛИРОВАТЬ КЛИ НА ВИНДОУС И ТЕЛЕФОНАХ, ЕСЛИ ВЫ НЕ ШАРИТЕ - НЕ ПОЛУЧИТСЯ.

Работающие функции бота:

  • тратить всю выносливость в лес/пещеру/побережье (по умолчанию ходит только в лес)
  • арена с рандомным выбором места атаки и защиты
  • перехват корованов
  • атака/защита по приказу бота/игрока или автоматическая защита замка
  • донат в казну замка перед битвой (по умолчанию выключен)
  • донат в лавку вместо казны (покупка-продажа барахла) (по умолчанию выключен. Для работы должен быть включен обычный донат. Если инвентарь полон - отключается, и происходит обычный донат в казну)
  • прокачка атаки/защиты при получении уровня (по умолчанию выключен)
  • ответы бота в групповой чат (по умолчанию выключен)
  • форвард лесных квестов от бота для помощи
  • сохранение текущего состояния и настроек в конфиг-файл, для восстановления после перезапуска
  • постройки в замке, когда закончилась арена и нет стамины
  • суммирование стока через PenguindrumStockBot
  • автопомощь ботов друг другу

Как запустить:

  1. Устанавливаем telegram-cli по официальной инструкции
  2. Устанавливаем pip3: sudo apt-get install python3-pip
  3. Устанавливаем pytg для 3 питона: pip3 install pytg pytz requests
  4. Запускаем telegram-cli: ./telegram-cli --json -P 1338
  5. Открываем еще один терминал
  6. Качаем этот скрипт (git clone https://github.com/Iriskin0/Chat-Wars-Bot.git) и запускаем: python3 main.py --admin "ваш ник" --order "ник игроков/ботов, выдающих приказы, через запятую без пробелов" --gold "сколько золота оставлять в кармане при автодонате" --buy "любое значение для включения доната в лавку" --lvlup "lvl_def - прокачка защиты/lvl_atk - прокачка атаки" --group_name 'название группового чата для отправки сообщений' --apikey "apikey для IFTTT, инструкция ниже"
  7. Для работы с капчой, начинаем общение с @ChatWarsCaptchaBot (тестируется) или бот сам первый напишет
  8. Для работы со стоками начинаем общение с @PenguindrumStockBot и объявляем майн профиль по инструкции бота

Команды боту от админа:

#help - Список всех команд
#enable_bot - Включить бота
#disable_bot - Выключить бота
#enable_arena - Включить арену
#disable_arena - Выключить арену
#enable_les - Включить лес
#disable_les - Выключить лес
#enable_peshera - Включить пещеры
#disable_peshera - Выключить пещеры
#enable_corovan - Включить корован
#disable_corovan - Выключить корован
#enable_more - Включить побережье
#disable_more - Выключить побережье
#enable_order - Включить приказы
#disable_order - Выключить приказы
#enable_auto_def - Включить авто деф
#disable_auto_def - Выключить авто деф
#enable_donate - Включить донат
#disable_donate - Выключить донат
#enable_buy - Включить донат в лавку вместо казны
#disable_buy - Вылючить донат в лавку вместо казны
#enable_quest_fight - Включить битву во время квеста
#disable_quest_fight - Выключить битву во время квеста
#lvl_atk - качать атаку
#lvl_def - качать защиту
#lvl_off - ничего не качать
#status - Получить статус
#hero - Получить информацию о герое
#push_order - Добавить приказ
#order - Дебаг, последняя команда защиты/атаки замка
#log - Дебаг, последние 30 сообщений из лога
#time - Дебаг, текущее время
#lt_arena - Дебаг, последняя битва на арене
#get_info_diff - Дебаг, последняя разница между запросами информации о герое
#ping - Дебаг, проверить жив ли бот
#enable_build - Включить постройки
#disable_build - Выключить постройки
#build_target - Задать цель для построек
#stock - Обновить сток в боте
#info - Оперативная информация по уровню, стамине, золоту и арене
#add ресурсы,через,запятую - Создать предложение в трейд боте с этими ресурсами
#detail - Почти вся информация о герое, только компактнее
#report - Получить репорт с прошлой битвы
#eval - Дебаг, выполнить запрос вручную

Интеграция с IFTTT (опционально)

  1. Регистрируемся/логинимся на IFTTT.com
  2. Заходим на IFTTT.com/maker_webhooks, нажимает Connect если не подключено, потом нажимаем Documentation, копируем apikey
  3. Идем на IFTTT.com/create, в графе This выбираем Webhooks, потом Receive a web request
  4. В Event Name вписываем bot_error
  5. В графе That можно использовать все что угодно, я использую Notifications, но можно и к Telegram подключить
  6. Настраиваем по инструкции (подключаем телефон/телеграм итд)
  7. Можете использовать мой текст: Ошибка {{Value2}} порт {{Value1}}: {{Value3}}, можете составить свой
  8. Value1 - это порт (для идентификации). Value2 - это тип ошибки (coroutine или очереди). Value3 - это описание ошибки
Как настроить другие триггеры:

Начинаем с 3 пункта, вписываем, смотря в таблицу:

Будет выглядеть как-то так (это старый скрин)

Автопомощь ботов

Если указан путь --fpath, боты по этому пути создают файл, на основании котрого другие боты в этом же замке приходят ему на помощь

chat-wars-bot's People

Contributors

adascal avatar allion avatar amuhametov avatar blazeis avatar bussas avatar chrme avatar iozerman avatar iriskin0 avatar isblaze avatar loskir avatar mnb3000 avatar neonik47 avatar nikolaz81 avatar vertox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chat-wars-bot's Issues

Ошибка coroutine: name 'endurancetop' is not defined

Подскажите пожалуйста, что за ошибка возникает? Бот работает на #ping отзывается.
По команде #stock выдает "Я еще не дорос, у меня только 0 уровень"

Парс сообщения с inline кнопкой

Тот же легат сейчас присылает приказ на атаку с инлайн-кнопкой. Telegram-cli вообще не видит такого сообщения. Есть варианты как распарсить такое сообещение?

Update readme

Обновите ридми. Слишком много каких-то странных вещей происходит.
Например, бот теперь пытается реквестнуть авторизацию и запрашивает код у телеграмма для логина. (Кстати, не работает из-за двухфакторной авторизации)

Ошибка coroutine: (SessionPasswordNeededError(...), 'Two-steps verification is enabled and a password is required.')

Вылет бота при запуске

При запуске бот мгновенно вылетает. Ругается на 486 линию кода.
Апдейт последний.

File "./Chat-Wars-Bo/main.py", line 486
def find_dialog_user(self, username: str):
                                                        ^

Новые замки

необходимо добавить поддержку двух новых замков

Трейд

ни как не пойму как пользоваться трейд ботом , всегда пишет на складе нет ресурса, подскажите что не так делаю, какая команда?

Не могу запустить из-за кодировки

При попытке стартануть бота ругается:
{'id': 265204902, 'flags': 4352, 'last_name': '', 'print_name': 'Chat_Wars', 'username': 'ChatWarsBot', 'first_name': 'Chat Wars', 'type': 'user'}
Unhandled exception in thread started by <function queue_worker at 0x7f1698187d90>
Traceback (most recent call last):
File "./main.py", line 140, in queue_worker
print(sender.contacts_search(captcha_bot))
UnicodeEncodeError: 'ascii' codec can't encode characters in position 65-74: ordinal not in range(128)

Стартую так python3 ./main.py --admin somebot1 --order MasterZZ --castle blue --gold 0

Демон

Как запустить программу в виде демона?

Форвард приказа

Приказ приходит инлайном, а телега эту фишку не поддерживает и хз что делать. Форвард по ИД сообщения не работает, т.к. не понимает как форвардить непонятное. Есть ли может патчи какие для телеги с поддержкой новых фишек?

несколько копий telegram-cli

Поделитесь подробной инфой, как запустить больше одного telegram-cli на одной машине (ubuntu server 16.04.02). Спасибо!

Слив голды в биржу

включить слив голды в биржу в ресурсы по списку (если нет первого идём к следующему)

Ошибка coroutine: 'username'

Не очень понял что это и на что влияет, но на маке валятся "Ошибка coroutine: 'username'", когда пока не разобрался, ещё потестирую и напишу.

Ввод телефона в параметры запуска

Не особо удобно при первичном логине на новой версии вводить номер. Да и прописывать код от телеги тоже тот ещё ад. Предлагаю, офк, если это возможно, вернуть старый способ, когда бот сам определял номер и получал код за тебя.

Репорты

Есть возможность реализовать репорты о строительстве, битве, дуэле в бот отряда?

команды торговли во время арены

речь о телетон версии.
команды торговли во время арены колдобят всего бота. Лог:

2017-09-08+ 10:05:57 Получили сообщение от бота. Проверяем условия
2017-09-08+ 10:06:06 Получили сообщение от бота. Проверяем условия
2017-09-08+ 10:06:06 Атака: 🗡по корпусу, Защита: 🛡ног
2017-09-08+ 10:06:13 Получили сообщение от администратора бота: #stock
2017-09-08+ 10:06:13 Отправляем 🗡по корпусу

и тишина..

2017-09-08+ 10:11:23 Получили сообщение от бота. Проверяем условия
2017-09-08+ 10:11:31 Получили сообщение от администратора бота: #add 104,121,129
2017-09-08+ 10:11:33 Получили сообщение от бота. Проверяем условия
2017-09-08+ 10:11:33 Атака: 🗡по ногам, Защита: 🛡корпуса
2017-09-08+ 10:11:39 добавляем ресурсы по списку..
2017-09-08+ 10:11:42 Отправляем 🗡по ногам
и тишина..

после этого бот перестаёт реагировать на внешние раздражители.

Вес приказов

В случае, если несколько источников приказов дают противоречивые приказы, подчиняться тому, кто указан первее в списке источников

TelegramAPI

Кстати, а есть возможность запуска бота на АПИ под простым юзером? Это могло бы облегчить вообще всё, да и запуск под Вин был бы осуществим...

Добавить автопрохождение туториала

Автопрохождение туториала
Примерный код:

if username == bot_username:
    log('Получили сообщение от бота.')

    elif "Привет, новобранец! А что же ты без меча пришел на доклад?" in text:
        action_list.append(orders['quests'])
        sleep_time = random.randint(1, 3)
        sleep(sleep_time)
        action_list.append(orders['les'])

    elif "Теперь нажми 🏰Замок для дальнейших указаний" in text:
        action_list.append(orders['castle_menu'])

    elif "Как закончишь, нажми 🏰Замок" in text:
        action_list.append(orders['castle_menu'])

    elif "Чтобы вооружиться, нажми /gift" in text:
        action_list.append('/gift')

    elif "Экипируйся. Для этого нажми /inv" in text:
        action_list.append('/inv')
        sleep(1)
        action_list.append('/on_100')
        sleep(1)
        action_list.append('/on_212')
        sleep(1)
        action_list.append(orders['castle_menu'])
        sleep(1)
        action_list.append('🏚Лавка')
        sleep(1)
        action_list.append('Снаряжение')
        sleep(1)
        action_list.append('Перчатки')
        sleep(1)
        action_list.append('Сапоги')
        sleep(1)
        action_list.append('Броня')
        sleep(1)
        action_list.append('Шлем')
        sleep(1)
        action_list.append('/buy_helmet1')
        sleep(1)
        action_list.append('/buy_armor1')
        sleep(1)
        action_list.append('/buy_boots1')
        sleep(1)
        action_list.append('/buy_gloves1')
        sleep(1)
        action_list.append('/on_225')
        sleep(1)
        action_list.append('/on_218')
        sleep(1)
        action_list.append('/on_200')
        sleep(1)
        action_list.append('/on_206')
        sleep(1)
        action_list.append(orders['hero'])

Не хватает построек

Сейчас присутствует не весь список построек, что доступен в игре.
Не хватает:
Лига диверсантов /build_saboteurs
Лига охотников /build_hunters

Команды боту

Доброго времени суток. Не могу разобраться как и куда вводить команды боту, те что вида #ping. Пробовал в чат сам с собой, не работает.

Общий сток твинков

Добавил twinkstock_enabled = False (по умолчанию всегда выключен, чтоб не слал сток каждый раз когда торговля нужна) и global twinkstock_enabled в нужном месте (хз как объяснить куда, т.к. все перелопачено в своем боте)
elif text == '#stock':
twinkstock_enabled = True
send_msg('@' , 'ChatWarsTradeBot', '/start')

И потом еще этот блок:
elif username == 'ChatWarsTradeBot' and twinkstock_enabled:
if text.find('Твой склад с материалами') != -1:
stock_id = message_id
fwd('@' , 'PenguindrumStockBot', stock_id)
twinkstock_enabled = False
send_msg('' , group_name, 'Сток обновлён!')

чтоб нормально работало надо зарегить всех твинков в PenguindrumStockBot, ну и соответственно смотреть сумму стоков потом уже в нем

сломались сокеты

Отвалился функционал соединения с tg-cli через сокет.

Traceback (most recent call last):
  File "./main.py", line 132, in <module>
    sender = Sender(sock=socket_path) if socket_path else Sender(host=host,port=port)
TypeError: __init__() got an unexpected keyword argument 'sock'

В чём может быть дело?

искать рецепты

на свободные средства и времени, брать в таверне кружку эля

стройка

Ребят, а почему стройка под условием проверки времени суток стоит?

Поимка лесного зверя в соло/группой

Введен доп контент, когда после похода в лес выдается ссылка на драку с монстром.
Предлагаю реализовать для соло боя (поиск в сообщении "/fight...." и отправка боту

По возможности, мб пересылка кому-то в группу или личку.

модификация

модифицировал бота:

  1. Он стал проверять профиль чаще (5-10 мин), а то не дело 4 раза в час на стройку ходить

  2. #61 Если не хватает денег на стройку, пытается задонатить 10 монет и сходить еще раз, правда не смог научить его чекать, что именно закончилось, поэтому если закончится лес или горы то он просто задонатит все в казну

  3. #62 Научил его не ходить в лес за несколько секунд до битвы и улучшил regex (заменил {0,1} на ?)

  4. Теперь он ходит по стройкам-лесам вплоть до 15 минут до битвы

  5. Убрал поход на стройку через меню замка, ведь все ходят по командам (мб нет)

image

автопрокачка

несколько раз уже наткнулся. автокач дефа работает, а вот с атакой не получается. грешил на несовпадение символа — не смог обнаружить разницы между отправляемой ботом командой, и командой с кнопки. соответственно, пока не получится прокачать атаку, бот пытается это сделать и не расходует стамину.
скрин ниже. первая команда от бота, вторая мышкой.
2017-05-13 21 12 21

/level_up
+1 ⚔️Атака

/level_up
+1 ⚔️Атака

Обновление инфы по герою

Информация по герою обновляется перед выполнением какого-то действия по расписанию, что не очень удобно, особенно когда отправляешь команду в атаку и хочется посмотреть применена она или нет. было бы удобно если бы инфа обновлялась сразу после выполнения действия.

Помогите с командами!

Ребята, помогите новичку в Ибунту :) Всё настроил, телега работает, бота запустил, тоже работает, но ни как не могу понять как послать команду к примеру отключения пещеры, что бы ходил только в лес, не могу понять куда именно отправлять эту команду и в каком виде, буду очень признателен вам за помощь!

Ошибка парсинга профиля. Скорее всего, когда до битвы несколько секунд

Exception during chatwars automation process: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Traceback (most recent call last):
File "./main.py", line 1468, in main
a.loop()
File "./main.py", line 550, in loop
self.hero_parser(m)
File "./main.py", line 952, in hero_parser
self.time_to_war = int(m.group(1)) * 60 + int(m.group(2))
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Обход капчи

Разбор текста капчи и отправка соответствующей картинки при "входе на арену или выходе в приключения"

лес/пещера

было бы удобно добавив в скрипт "переключатель" лес/пещера.

Проверка наличия отправляемой кнопки

Крайне необходимо это сделать, поскольку я помню, как в один прекрасный день Кольцов начал экспериментировать и добавлял в кнопки латинские символы. Но в скрипте я такой проверки не нашёл. И вообще, похоже, в Telegram-CLI нельзя их получить вместе с сообщением. Или возможно?

[Инлайн кнопка] Не парсит приказы в чатах от прописанных в ключе админах

При загрузке скрипта прописываю админов в виде --order "xxx,yyy" где, например XXX - живой человек, а YYY - замковый бот, вещающие в чат (канал) отряда.
Когда приходят приказы о нападении/дефе в канал от XXX и/или YYY, то они не воспринимаются ботом и не отправляются в основной канал ChatWars.

Бот обновлен. Cli живой.
Все работало с апреля.

Появилось ощущение, что перестало работать синхронно с обновлением, в котором перестало быть нужно прописывать замок в ключе.

Отправка команд

Добавьте пожалуйста возможность отправки команд.
Допустим
#send_order Команда(той что нет в списке возможных команд)
например для покупки чего-либо или одевания или внимания шмота, в общем было бы удобно иметь возможность сразу отправить команду.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.