Новый установщик и инструкция. Да вообще всё новое (кроме бота)

This commit is contained in:
Sergey 2021-02-23 23:22:16 +03:00
parent 03496f5d44
commit d5a3ce7531
5 changed files with 103 additions and 24 deletions

View File

@ -1 +1,49 @@
# 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

View File

@ -2,7 +2,7 @@ version: '3'
services:
app:
bot:
image: kylmakalle/tgvkbot:latest
container_name: tgvkbot
logging:

View File

@ -1,26 +1,41 @@
sudo true
#!/usr/bin/env bash
ASKED_FOR_SUDO=""
if [ ! `which docker` ]; then
echo "🔨 Устанавливаем docker..."
# Alternatively you can use the official docker install script
wget -qO- https://get.docker.com/ | sh
if [ ! $(which docker) ]; then
echo "🔑 Пароль sudo потребуется для установки Docker"
sudo true
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
if [ ! `which docker-compose` ]; then
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"
if [ ! $(which docker-compose) ]; then
if [ ! $ASKED_FOR_SUDO ]; then
echo "🔑 Пароль sudo потребуется для установки docker-compose"
sudo true
ASKED_FOR_SUDO="1"
fi
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
echo "⚙️ Настраиваем переменные окружения..."
python3 set_env.py
python3 setenv.py
if [ ! "$(docker ps -a | grep <name>)" ]; then
echo "🔄 Поднимаем систему обновлений..."
if [ ! "$(docker ps -a | grep watchtower)" ]; then
echo "🔄 Поднимаем систему обновлений watchtower..."
docker run -d \
--name watchtower \
--restart always \
@ -31,10 +46,14 @@ if [ ! "$(docker ps -a | grep <name>)" ]; then
-e WATCHTOWER_MONITOR_ONLY='false' \
-e WATCHTOWER_LABEL_ENABLE='true' \
containrrr/watchtower:latest
else
echo "👌 Апдейтер watchtower уже запущен"
fi
# Нужно убедиться, что бот встанет
set -e
echo "🚀 Запускаем бота..."
docker-compose up -d
echo "✅ Готово"

View File

@ -12,6 +12,7 @@ VK_APP_ID=%(vk_app_id)s
ALLOWED_USER_IDS=%(allowed_user_ids)s
"""
ENV_FILE = 'env_file'
def check_token(token):
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 = tg_token.strip()
try:
print('⏳ Проверяем токен...')
check_token(tg_token)
break
except HTTPError:
print('❌ Токен бота неверный или нерабочий, попробуйте снова!')
while True:
vk_app_id = input('VK APP ID: ')
vk_app_id = input('VK APP ID (можно оставить пустым): ')
vk_app_id = vk_app_id.strip()
if vk_app_id:
try:
@ -57,13 +59,19 @@ def set_env():
break
except HTTPError:
print('❌ VK APP ID неверный, попробуйте снова!')
else:
print(' Будет использован VK APP ID {} от Kate Mobile'.format(VK_APP_ID))
break
with open('env_file', 'w') as env_file:
env_file.write(s
with open(ENV_FILE, 'w') as env_file:
env_file.write(
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__':
set_env()
try:
set_env()
except KeyboardInterrupt:
print('\n⚠️ Настройка переменных окружуения была прервана!')

View File

@ -698,7 +698,7 @@ async def help_command(msg: types.Message):
'/chat - Список связанных чатов с диалогами ВКонтакте, привязать чат к диалогу можно добавив бота в группу\n' \
'/stop - Выход из ВКонтакте\n' \
'/help - Помощь' \
'/id - Узнать Telegram ID'
'/id - Узнать Telegram ID'
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':
m = oauth_link.search(msg.text)
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)
token = m.group(2)
if not VkUser.objects.filter(token=token).exists():