Помимо бота нужно будет создать мини сервер, который будет заниматься генерацией ссылок, их обработкой, и обновлением базы данных бота. Ну и наверное домен какой никакой нужен, чтобы по ссылкам водить. Если бот работает просто через longpolling, то это нужно будет. Если он уже крутится в каком нибудь веб приложении на вебхуках, то можно и там что нибудь приделать.
В БД должно быть две таблицы:
1. Дискорд бота, для хранения кол-ва переходов и тд
2. Сервера, для хранения реф ссылок
А так будет примерно следующее:
- Пользователь отправляет в чат .getref
- Обработчик бота получает команду. В обработчике отправляем запрос на наш API эндпоинт для генерации ссылок. В теле запроса лежит ссылка назначения
- API генерирует строку (допустим 8 символов), проверяет на уникальность и заносит в БД уникальную строку и ссылку назначения
- API возвращает уникальную строку, склеивая ее с нашим доменом. Пример: https://domain.com/url/XXX
- В обработчик возвращается ссылка, отправляется в чат
- Пользователь копирует ссылку, идёт её разбрасывать
- На сервер так же добавляем обработчик ссылок вида /url/url_hash
- В этом обработчике, при получении GET запроса, обновляем число рефералов у соответствующего юзера в БД
- Из БД дергаем ссылку назначения по нашему хэшу и возвращаем редирект на нёё
- Пользователь переадресован на нужную ссылку, рефералы записаны
Ну это плюс-минус, в общем случае. Осталось понять как не считать рефы за запросы от одного и того же пользователя