Новый установщик и инструкция. Да вообще всё новое (кроме бота)
This commit is contained in:
parent
03496f5d44
commit
d5a3ce7531
48
README.md
48
README.md
@ -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
|
||||
|
@ -2,7 +2,7 @@ version: '3'
|
||||
|
||||
|
||||
services:
|
||||
app:
|
||||
bot:
|
||||
image: kylmakalle/tgvkbot:latest
|
||||
container_name: tgvkbot
|
||||
logging:
|
||||
|
53
install.sh
53
install.sh
@ -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 "✅ Готово"
|
||||
|
||||
|
18
setenv.py
18
setenv.py
@ -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⚠️ Настройка переменных окружуения была прервана!')
|
||||
|
@ -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():
|
||||
|
Loading…
x
Reference in New Issue
Block a user