Новый установщик и инструкция. Да вообще всё новое (кроме бота)
This commit is contained in:
parent
03496f5d44
commit
d5a3ce7531
48
README.md
48
README.md
@ -1 +1,49 @@
|
|||||||
# tgvkbot
|
# tgvkbot
|
||||||
|
Общайтесь в VK через Telegram бота.
|
||||||
|
|
||||||
|
- Бот от разработчика - [@tgvkbot](https://t.me/tgvkbot)
|
||||||
|
|
||||||
|
- Канал - [@tg_vk](https://t.me/tg_vk)
|
||||||
|
|
||||||
|
- Чат - https://t.me/joinchat/BZq6jwxeTh04qBzilM5x3g
|
||||||
|
|
||||||
|
|
||||||
|
# Простая Установка (Ubuntu)
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/Kylmakalle/tgvkbot
|
||||||
|
cd tgvkbot
|
||||||
|
./install.sh
|
||||||
|
|
||||||
|
Токен Telegram бота: 123456789:AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLL
|
||||||
|
VK APP ID (можно оставить пустым):
|
||||||
|
```
|
||||||
|
|
||||||
|
Далее потребуется ввести пароль от `sudo` пользователя и Telegram-token, остальные переменные необязательны.
|
||||||
|
|
||||||
|
_Установщик поставит Docker и docker-compose, настроит переменные окружения и запустит контейнер для обновлений, а затем поднимет бота с его базой данных._
|
||||||
|
|
||||||
|
|
||||||
|
### Ограничение пользователей
|
||||||
|
Если по каким-то причинам хочется чтобы ботом пользовались исключительно определенные пользователи, то это можно сделать изменив файл конфигурации.
|
||||||
|
Потребуется прописать параметр в таком виде, где числа - Telegram ID пользователей через запятую.
|
||||||
|
|
||||||
|
`ALLOWED_USER_IDS=12345678,001238091`
|
||||||
|
|
||||||
|
ID можно узнать командой `/id` в боте или через других ботов/софт.
|
||||||
|
|
||||||
|
|
||||||
|
### Обновление
|
||||||
|
Бот автоматически обновляется через образ на [dockerhub](https://hub.docker.com/r/kylmakalle/tgvkbot/tags?page=1&ordering=last_updated), где на всякий случай фиксируются версии каждого коммита.
|
||||||
|
|
||||||
|
Стандартный установщик поднимает [watchtower](https://containrrr.dev/watchtower), который раз в час проверяет обновления.
|
||||||
|
|
||||||
|
# Сервисы музыки (Устаревшие)
|
||||||
|
Ниже прокси для музыки, которые использовали ранее. Сейчас они нерелевантны, но код открыт и в боте есть поддержка кастомных бэкендов музыки.
|
||||||
|
|
||||||
|
API - https://github.com/Kylmakalle/thatmusic-api
|
||||||
|
|
||||||
|
Token Refresher - https://github.com/Kylmakalle/vk-audio-token/tree/refresh-api
|
||||||
|
|
||||||
|
|
||||||
|
# Лицензия
|
||||||
|
MIT
|
||||||
|
@ -2,7 +2,7 @@ version: '3'
|
|||||||
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
app:
|
bot:
|
||||||
image: kylmakalle/tgvkbot:latest
|
image: kylmakalle/tgvkbot:latest
|
||||||
container_name: tgvkbot
|
container_name: tgvkbot
|
||||||
logging:
|
logging:
|
||||||
|
53
install.sh
53
install.sh
@ -1,26 +1,41 @@
|
|||||||
sudo true
|
#!/usr/bin/env bash
|
||||||
|
ASKED_FOR_SUDO=""
|
||||||
|
|
||||||
if [ ! `which docker` ]; then
|
if [ ! $(which docker) ]; then
|
||||||
echo "🔨 Устанавливаем docker..."
|
echo "🔑 Пароль sudo потребуется для установки Docker"
|
||||||
# Alternatively you can use the official docker install script
|
sudo true
|
||||||
wget -qO- https://get.docker.com/ | sh
|
ASKED_FOR_SUDO="1"
|
||||||
|
|
||||||
|
echo "🔨 Устанавливаем docker..."
|
||||||
|
curl -fsSL https://get.docker.com/ | sh
|
||||||
|
user="$(id -un 2>/dev/null || true)"
|
||||||
|
sudo groupadd docker
|
||||||
|
sudo usermod -aG docker $user
|
||||||
|
else
|
||||||
|
echo "👌 Docker уже установлен"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! `which docker-compose` ]; then
|
if [ ! $(which docker-compose) ]; then
|
||||||
echo "🔨 Устанавливаем docker-compose..."
|
if [ ! $ASKED_FOR_SUDO ]; then
|
||||||
# Install docker-compose
|
echo "🔑 Пароль sudo потребуется для установки docker-compose"
|
||||||
COMPOSE_VERSION=`git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1`
|
sudo true
|
||||||
sudo sh -c "curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose"
|
ASKED_FOR_SUDO="1"
|
||||||
sudo chmod +x /usr/local/bin/docker-compose
|
fi
|
||||||
sudo sh -c "curl -L https://raw.githubusercontent.com/docker/compose/${COMPOSE_VERSION}/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose"
|
echo "🔨 Устанавливаем docker-compose..."
|
||||||
|
# Install docker-compose
|
||||||
|
COMPOSE_VERSION=$(git ls-remote https://github.com/docker/compose | grep refs/tags | grep -oE "[0-9]+\.[0-9][0-9]+\.[0-9]+$" | sort --version-sort | tail -n 1)
|
||||||
|
sudo sh -c "curl -L https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose"
|
||||||
|
sudo chmod +x /usr/local/bin/docker-compose
|
||||||
|
sudo sh -c "curl -L https://raw.githubusercontent.com/docker/compose/${COMPOSE_VERSION}/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose"
|
||||||
|
else
|
||||||
|
echo "👌 Docker-compose уже установлен"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
echo "⚙️ Настраиваем переменные окружения..."
|
echo "⚙️ Настраиваем переменные окружения..."
|
||||||
python3 set_env.py
|
python3 setenv.py
|
||||||
|
|
||||||
if [ ! "$(docker ps -a | grep <name>)" ]; then
|
if [ ! "$(docker ps -a | grep watchtower)" ]; then
|
||||||
echo "🔄 Поднимаем систему обновлений..."
|
echo "🔄 Поднимаем систему обновлений watchtower..."
|
||||||
docker run -d \
|
docker run -d \
|
||||||
--name watchtower \
|
--name watchtower \
|
||||||
--restart always \
|
--restart always \
|
||||||
@ -31,10 +46,14 @@ if [ ! "$(docker ps -a | grep <name>)" ]; then
|
|||||||
-e WATCHTOWER_MONITOR_ONLY='false' \
|
-e WATCHTOWER_MONITOR_ONLY='false' \
|
||||||
-e WATCHTOWER_LABEL_ENABLE='true' \
|
-e WATCHTOWER_LABEL_ENABLE='true' \
|
||||||
containrrr/watchtower:latest
|
containrrr/watchtower:latest
|
||||||
|
else
|
||||||
|
echo "👌 Апдейтер watchtower уже запущен"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Нужно убедиться, что бот встанет
|
||||||
|
set -e
|
||||||
|
|
||||||
echo "🚀 Запускаем бота..."
|
echo "🚀 Запускаем бота..."
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|
||||||
echo "✅ Готово"
|
echo "✅ Готово"
|
||||||
|
|
||||||
|
18
setenv.py
18
setenv.py
@ -12,6 +12,7 @@ VK_APP_ID=%(vk_app_id)s
|
|||||||
ALLOWED_USER_IDS=%(allowed_user_ids)s
|
ALLOWED_USER_IDS=%(allowed_user_ids)s
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
ENV_FILE = 'env_file'
|
||||||
|
|
||||||
def check_token(token):
|
def check_token(token):
|
||||||
response = urlopen("https://api.telegram.org/bot{token}/{method}".format(token=token, method='getMe'))
|
response = urlopen("https://api.telegram.org/bot{token}/{method}".format(token=token, method='getMe'))
|
||||||
@ -43,13 +44,14 @@ def set_env():
|
|||||||
tg_token = input('Токен Telegram бота: ')
|
tg_token = input('Токен Telegram бота: ')
|
||||||
tg_token = tg_token.strip()
|
tg_token = tg_token.strip()
|
||||||
try:
|
try:
|
||||||
|
print('⏳ Проверяем токен...')
|
||||||
check_token(tg_token)
|
check_token(tg_token)
|
||||||
break
|
break
|
||||||
except HTTPError:
|
except HTTPError:
|
||||||
print('❌ Токен бота неверный или нерабочий, попробуйте снова!')
|
print('❌ Токен бота неверный или нерабочий, попробуйте снова!')
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
vk_app_id = input('VK APP ID: ')
|
vk_app_id = input('VK APP ID (можно оставить пустым): ')
|
||||||
vk_app_id = vk_app_id.strip()
|
vk_app_id = vk_app_id.strip()
|
||||||
if vk_app_id:
|
if vk_app_id:
|
||||||
try:
|
try:
|
||||||
@ -57,13 +59,19 @@ def set_env():
|
|||||||
break
|
break
|
||||||
except HTTPError:
|
except HTTPError:
|
||||||
print('❌ VK APP ID неверный, попробуйте снова!')
|
print('❌ VK APP ID неверный, попробуйте снова!')
|
||||||
|
else:
|
||||||
|
print('ℹ️ Будет использован VK APP ID {} от Kate Mobile'.format(VK_APP_ID))
|
||||||
|
break
|
||||||
|
|
||||||
with open('env_file', 'w') as env_file:
|
with open(ENV_FILE, 'w') as env_file:
|
||||||
env_file.write(s
|
env_file.write(
|
||||||
ENV_FILE_TEMPLATE % {'tg_token': tg_token, 'vk_app_id': vk_app_id or VK_APP_ID, 'allowed_user_ids': ''})
|
ENV_FILE_TEMPLATE % {'tg_token': tg_token, 'vk_app_id': vk_app_id or VK_APP_ID, 'allowed_user_ids': ''})
|
||||||
|
|
||||||
print('✅ Успешно!')
|
print('✅ Переменные успешно установлены в {}'.format(ENV_FILE))
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
set_env()
|
try:
|
||||||
|
set_env()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print('\n⚠️ Настройка переменных окружуения была прервана!')
|
||||||
|
@ -698,7 +698,7 @@ async def help_command(msg: types.Message):
|
|||||||
'/chat - Список связанных чатов с диалогами ВКонтакте, привязать чат к диалогу можно добавив бота в группу\n' \
|
'/chat - Список связанных чатов с диалогами ВКонтакте, привязать чат к диалогу можно добавив бота в группу\n' \
|
||||||
'/stop - Выход из ВКонтакте\n' \
|
'/stop - Выход из ВКонтакте\n' \
|
||||||
'/help - Помощь' \
|
'/help - Помощь' \
|
||||||
'/id - Узнать Telegram ID'
|
'/id - Узнать Telegram ID'
|
||||||
|
|
||||||
await bot.send_message(msg.chat.id, HELP_MESSAGE, parse_mode=ParseMode.HTML)
|
await bot.send_message(msg.chat.id, HELP_MESSAGE, parse_mode=ParseMode.HTML)
|
||||||
|
|
||||||
@ -714,6 +714,10 @@ async def handle_text(msg: types.Message):
|
|||||||
if msg.chat.type == 'private':
|
if msg.chat.type == 'private':
|
||||||
m = oauth_link.search(msg.text)
|
m = oauth_link.search(msg.text)
|
||||||
if m:
|
if m:
|
||||||
|
if ALLOWED_USER_IDS:
|
||||||
|
if str(msg.from_user.id) not in ALLOWED_USER_IDS.replace(' ', '').split(','):
|
||||||
|
await msg.reply('⛔️ Бот недоступен для Вашего аккаунта.\nУзнать Telegram ID - /id')
|
||||||
|
return
|
||||||
await bot.send_chat_action(msg.from_user.id, ChatActions.TYPING)
|
await bot.send_chat_action(msg.from_user.id, ChatActions.TYPING)
|
||||||
token = m.group(2)
|
token = m.group(2)
|
||||||
if not VkUser.objects.filter(token=token).exists():
|
if not VkUser.objects.filter(token=token).exists():
|
||||||
|
Loading…
x
Reference in New Issue
Block a user