---
# System prepended metadata

title: Бот - main
tags: [tasks, bot]

---

# Бот - main

###### tags: `bot`, `tasks`

Файл реализации - [`run_bot.py`](https://github.com/google/clusterfuzz/blob/master/src/python/bot/startup/run_bot.py)

При запуске виртуалки на ней запускает программа-бот. Задачей бота является выполнение тасков, приходящих к нему. Таски [берутся](https://github.com/google/clusterfuzz/blob/master/src/python/bot/startup/run_bot.py#L79) из различных очередей. 

В качестве аргументов передаётся тройка: 
- `task_name` - Команда, которую надо выполнить (прим. fuzz)
- `task_argument` - Аргумент команды (прим. имя фаззера)
- `job_name` - Что - то ещё, характерное для таска

Таски могут быть следующих видов:
```python=
COMMAND_MAP = {
    'analyze': analyze_task,
    'blame': blame_task,
    'corpus_pruning': corpus_pruning_task,
    'fuzz': fuzz_task,
    'impact': impact_task,
    'minimize': minimize_task,
    'ml_train': ml_train_task,
    'progression': progression_task,
    'regression': regression_task,
    'symbolize': symbolize_task,
    'unpack': unpack_task,
    'upload_reports': upload_reports_task,
    'variant': variant_task,
}
```

Для запуска одного раунда фаззера используется fuzz_task. (Подробнее [здесь](https://hackmd.io/@reverse-clusterfuzz/r1aESmtI8))

Перед выполнением fuzz - таска сервер может поднять локальный http-сервер для манипуляций с тест-кейсами (для blackbox - фаззинга, это не для нас, т.к. у нас libFuzzer).