#!/usr/bin/env -S uv run --script
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "matplotlib==3.8.4",
# ]
# ///
# далее твой код тут уже идет
version: '3'
services:
wg-easy:
image: weejewel/wg-easy
container_name: wg-easy
volumes:
- ./wg-easy:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- WG_HOST=your_server_ip
- PASSWORD=your_password
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
byedpi:
image: bol-van/zapret:latest
container_name: byedpi
network_mode: "host"
cap_add:
- NET_ADMIN
volumes:
- /dev/net/tun:/dev/net/tun
environment:
- WORKER=3 # Количество рабочих процессов
- MODE=desktop
restart: unless-stopped
shadowsocks:
image: shadowsocks/shadowsocks-libev
container_name: shadowsocks
ports:
- "8388:8388"
environment:
- METHOD=aes-256-gcm
- PASSWORD=your_ss_password
restart: unless-stopped
# Перенаправление трафика с WireGuard на ByeDPI
iptables -t nat -A PREROUTING -i wg0 -p tcp -j REDIRECT --to-port 8118
# Если используется Shadowsocks вместо ByeDPI
iptables -t nat -A PREROUTING -i wg0 -p tcp -j REDIRECT --to-port 8388
from telegram.ext import Application, CommandHandler, CallbackContext
from telegram import Update
import requests
from bs4 import BeautifulSoup
import time
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger(__name__)
CHANNEL_IDS = ['UCvuY904el7JvBlPbdqbfguw','UC_hPYclmFCIENpMUHpPY8FQ', 'UC_hPYclmFCIENpMUHpPY8FQ'] # Сюда нужно ввести идентификаторы каналов
latest_videos = {}
async def start(update: Update, context: CallbackContext):
await update.message.reply_text('Привет! Я буду оповещать тебя о новых видео с выбранных тобой каналов.')
def check_new_videos(context: CallbackContext):
for channel_id in CHANNEL_IDS:
url = f'https://www.youtube.com/feeds/videos.xml?channel_id={
channel_id}'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'xml')
entry = soup.find('entry')
if entry:
video_id = entry.find('yt:videoId').text
if latest_videos.get(channel_id) != video_id:
latest_videos[channel_id] = video_id
video_title = entry.find('title').text
message = f'Новое видео: {
video_title}nСсылка: https://www.youtube.com/watch?v={video_id}'
context.bot.send_message(
chat_id=context.job.context, text=message)
time.sleep(1)
async def subscribe(update: Update, context: CallbackContext):
chat_id = update.message.chat_id
context.job_queue.run_repeating(
check_new_videos, interval=5, first=0, chat_id=chat_id)
await update.message.reply_text('Вы подписались на уведомления о новых видео.')
if __name__ == '__main__':
application = Application.builder().token(__import__('os').getenv('TOKEN')).build() # Переделанный токен для телеграм бота через переменную окружения
application.add_handler(CommandHandler('start', start))
application.add_handler(CommandHandler('subscribe', subscribe))
application.run_polling()
https://www.youtube.com/watch?v=0Osso8mLL-A
или просто почитай статью
https://habr.com/ru/articles/828016/
У меня библиотека arcade установилась легко с помощью uv add arcade в последней версии python и не выдала не каких ошибок в твоем коде