Added whitelist, Implemented env configuration

This commit is contained in:
Egor 2024-10-31 01:26:44 +03:00
parent 1da8320477
commit b76916ae98
4 changed files with 65 additions and 12 deletions

3
.env.example Normal file
View file

@ -0,0 +1,3 @@
BOT_TOKEN='TOKEN'
YA_TOKEN='TOKEN'
WHITELISTED=user1,user2,user3

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
.venv .venv
.env

55
bot.py
View file

@ -1,6 +1,10 @@
import logging, requests, json import logging
import requests
import json
import os
from telegram import Update, ReplyKeyboardMarkup from telegram import Update, ReplyKeyboardMarkup
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler, MessageHandler, filters from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler, MessageHandler, ConversationHandler, filters
from dotenv import load_dotenv
logging.basicConfig( logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
@ -8,8 +12,12 @@ logging.basicConfig(
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
bot_token = '7636065770:AAF8UV5Vb2F7aRuO8EYTyv0xGBmd3dQeonQ'
ya_token = 'y0_AgAAAABiFlEmAAbJ0QAAAAEWkS6NAABACUMU8JdJWoZeypr0qWs05ayGjQ' load_dotenv()
bot_token = os.getenv('BOT_TOKEN')
ya_token = os.getenv('YA_TOKEN')
whitelisted = os.getenv('WHITELISTED')
ya_url = 'https://partner2.yandex.ru/api/statistics2/get.json' ya_url = 'https://partner2.yandex.ru/api/statistics2/get.json'
msg_to_period = { msg_to_period = {
"Сегодня": "today", "Сегодня": "today",
@ -18,13 +26,20 @@ msg_to_period = {
} }
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
if update.effective_user.username not in whitelisted:
await update.message.reply_text("Запрет")
return ConversationHandler.END
reply_keyboard = [["Сегодня", "Вчера", "Месяц"]] reply_keyboard = [["Сегодня", "Вчера", "Месяц"]]
await update.message.reply_text("Какую стату вывести", reply_markup=ReplyKeyboardMarkup(reply_keyboard)) await update.message.reply_text("Какую стату вывести", reply_markup=ReplyKeyboardMarkup(reply_keyboard))
return 0
async def ya_api(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
async def ya_api(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
reply = await fetch_data(update.message.text) reply = await fetch_data(update.message.text)
await update.message.reply_text(reply) await update.message.reply_text(reply)
return 0
async def fetch_data(msg_period: str) -> str: async def fetch_data(msg_period: str) -> str:
response = requests.get(ya_url, headers={'Authorization': ya_token}, params={ response = requests.get(ya_url, headers={'Authorization': ya_token}, params={
@ -33,7 +48,6 @@ async def fetch_data(msg_period: str) -> str:
'field': ['shows', 'hits_render', 'partner_wo_nds', 'cpmv_partner_wo_nds'] 'field': ['shows', 'hits_render', 'partner_wo_nds', 'cpmv_partner_wo_nds']
}) })
json_data = json.loads(response.text) json_data = json.loads(response.text)
logger.info(json_data)
data = json_data['data']['totals']['2'][0] data = json_data['data']['totals']['2'][0]
return f"Данные за {msg_period}\n\n\ return f"Данные за {msg_period}\n\n\
Подборы рекламы: {data['hits_render']}\n\ Подборы рекламы: {data['hits_render']}\n\
@ -42,10 +56,33 @@ async def fetch_data(msg_period: str) -> str:
Стоимость 1к видимых показов: {data['cpmv_partner_wo_nds']} руб." Стоимость 1к видимых показов: {data['cpmv_partner_wo_nds']} руб."
async def cancel(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
await update.message.reply_text("домой")
return ConversationHandler.END
if __name__ == '__main__': if __name__ == '__main__':
if ya_token is None:
logger.fatal("YA_TOKEN env variable is required")
exit(1)
if bot_token is None:
logger.fatal("BOT_TOKEN env variable is required")
exit(1)
if whitelisted is None:
logger.fatal("WHITELISTED env varialbe is required")
exit(1)
whitelisted = whitelisted.split(',')
application = ApplicationBuilder().token(bot_token).build() application = ApplicationBuilder().token(bot_token).build()
application.add_handler(CommandHandler('start', start)) conv_handler = ConversationHandler(
application.add_handler(MessageHandler(filters.Regex("^(Сегодня|Вчера|Месяц)$"), ya_api)) entry_points=[CommandHandler('start', start)],
states={
0: [MessageHandler(filters.Regex("^(Сегодня|Вчера|Месяц)$"), ya_api)]
},
fallbacks=[CommandHandler('cancel', cancel)]
)
application.add_handler(conv_handler)
application.run_polling() application.run_polling()

12
requirements.txt Normal file
View file

@ -0,0 +1,12 @@
anyio==4.6.2.post1
certifi==2024.8.30
charset-normalizer==3.4.0
h11==0.14.0
httpcore==1.0.6
httpx==0.27.2
idna==3.10
python-dotenv==1.0.1
python-telegram-bot==21.6
requests==2.32.3
sniffio==1.3.1
urllib3==2.2.3