GithubHelp home page GithubHelp logo

ssshmyaks / rubtousd Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 0.0 5 KB

Every 5 seconds Telegram bot sends you the current dollar rate from the central bank. The code uses the Aiogram library

Python 100.00%
api exchange-rates kurs rub rub-to-usd usd

rubtousd's People

Contributors

ssshmyaks avatar

Watchers

Dionisis Pettas avatar  avatar

rubtousd's Issues

Проблема использования библиотеки Telebot для регулярной отправки сообщений

Описание:

В текущей реализации бота используется цикл while True, который отправляет запрос каждые 5 секунд. Это может привести к проблемам с использованием ресурсов, особенно при массовом наплыве пользователей. В случае массового использования, бот будет часто сталкиваться с ошибкой 429 ("Too Many Requests"), что может привести к нежелательным проблемам.

Предложение:

1. Оценить возможность использования асинхронных методов для отправки сообщений, чтобы уменьшить нагрузку на сервер и избежать чрезмерного использования ресурсов.
2. Реализовать механизм обработки ошибок, связанных с получением ошибки 429 ("Too Many Requests"), включая повторную попытку отправки сообщения через указанный интервал времени (параметр retry_after).
3. Предложить пользователю опцию настройки интервала между запросами, чтобы избежать возможных проблем с ограничениями на частоту запросов.

Дополнительные замечания:

При проектировании и реализации бота необходимо также учитывать возможные ограничения и правила платформы Telegram, такие как "slow_mode", который может ограничить частоту отправки сообщений в группах.

Предложение:

  1. Используйте асинхронные методы aiogram для отправки сообщений, чтобы уменьшить нагрузку на сервер и избежать чрезмерного использования ресурсов.
  2. Реализуйте механизм обработки ошибок, связанных с получением ошибки 429 ("Too Many Requests"), включая повторную попытку отправки сообщения через указанный интервал времени.
  3. Добавьте максимальное количество комментариев в код для обеспечения понятности и поддерживаемости.
  4. Обеспечьте корректную обработку всех возможных исключений при отправке сообщений и получении данных от ЦБ РФ.

Дополнительные замечания:

Пожалуйста, обратите внимание на то, что даже с обработкой ошибки 429 ("Too Many Requests"), частая отправка сообщений может привести к негативному воздействию на вашего бота и Telegram API. Рекомендую Вам установить разумные интервалы для отправки сообщений и обеспечить возможность настройки этих интервалов пользователем.

import asyncio
import requests
import aiogram
from aiogram import Bot, types
from aiogram.utils import executor
import config

bot = Bot(token=config.TOKEN)
dp = aiogram.Dispatcher(bot)

async def send_currency_rate(chat_id):
    try:
        # отправляем запрос к цб для получения текущего курса доллара
        data = requests.get('https://www.cbr-xml-daily.ru/daily_json.js').json()
        # отправляем сообщение с текущим курсом
        await bot.send_message(chat_id, data['Valute']['USD']['Value'])
    except requests.RequestException as e:
        # лбрабатываем ошибку при отправке запроса к цб
        print("Ошибка при отправке запроса к Центробанку:", e)

@dp.message_handler(commands=['start'])
async def start(message: types.Message):
    while True:
        try:
            # отправляет текущий курс
            await send_currency_rate(message.chat.id)
            # ждём 5 секк перед отправкой следующего сообщения
            await asyncio.sleep(5)
        except aiogram.utils.exceptions.RetryAfter as e:
            # ловим 429 ("Too Many Requests")
            retry_after = e.timeout
            print(f"Слишком много запросов. Повторная попытка через {retry_after} сек.")
            await asyncio.sleep(retry_after)
        except Exception as e:
            # орабатываем другие возможные ошибки
            print("Ошибка при отправке сообщения:", e)

if __name__ == '__main__':
    # Запускаем бота
    executor.start_polling(dp, skip_updates=True)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.