add computing connect

This commit is contained in:
2023-11-11 09:47:34 +07:00
parent 8c04c67c27
commit ebd1b6002b
42 changed files with 280 additions and 121 deletions
Regular → Executable
View File
+7
View File
@@ -0,0 +1,7 @@
FROM python:3.10.6
LABEL authors="dmitrium12"
WORKDIR /audio_resive
COPY . .
RUN pip3 install -r requirements.txt
RUN pip3 install -U openai-whisper
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
BIN
View File
Binary file not shown.
+14
View File
@@ -0,0 +1,14 @@
version: '3.7'
services:
backend:
container_name: audio_resive
build: .
restart: always
volumes:
- ".:/audio_resive"
working_dir: /audio_resive
command:
- /bin/sh
- -c
- |
python main.py
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
View File
View File
View File
Regular → Executable
+27 -14
View File
@@ -2,17 +2,19 @@ import subprocess
import speech_recognition as sr import speech_recognition as sr
import os import os
from functions.loging import loging from functions.loging import loging
import requests
class Converter: class Converter:
""" """
Этот класс выполняет главную функцию, конвертирует голос в текст Этот класс выполняет главную функцию, конвертирует голос в текст
""" """
def __init__(self, path_to_file: str, message, language: str = "ru-RU"): def __init__(self, path_to_file: str, message, model, language: str = "ru-RU"):
self.language = language self.language = language
self.path_to_file = path_to_file self.path_to_file = path_to_file
self.service = None self.service = None
self.message = message self.message = message
self.model = model
def audio_to_text(self) -> str: def audio_to_text(self) -> str:
""" """
@@ -20,21 +22,32 @@ class Converter:
:return: str - текст + служебная информация :return: str - текст + служебная информация
""" """
f = -1.0 # f = -1.0
try: try:
try: r = requests.get("http://192.168.0.108:5000/ping")
import mutagen if r.status_code == 200:
f = mutagen.File(self.path_to_file) # получение данных mutagen response = requests.post("http://192.168.0.108:5000/decrypt_audio",
f = float(f.info.length) files={"file": open(self.path_to_file, "rb").read()})
if f >= 30.0: # если длинна больше 30 секунд if response.status_code == 200:
self.service = "google" # устанавливаю сервис google return f"От компа:\n{response.text.replace('"', '')}"
return self.google(f) # запуск функции google
else: else:
self.service = "yandex" # устанавливаем сервис yandex return 'Не удалось получить текст.'
return self.yandex(f) # запуск функции yandex else:
except Exception as e: # если какая-то проблема result = self.model.transcribe(self.path_to_file)
print(e) return result["text"]
return self.google(f) # запуск функции google # try:
# import mutagen
# f = mutagen.File(self.path_to_file) # получение данных mutagen
# f = float(f.info.length)
# if f >= 30.0: # если длинна больше 30 секунд
# self.service = "google" # устанавливаю сервис google
# return self.google(f) # запуск функции google
# else:
# self.service = "yandex" # устанавливаем сервис yandex
# return self.yandex(f) # запуск функции yandex
# except Exception as e: # если какая-то проблема
# print(e)
# return self.google(f) # запуск функции google
except sr.RequestError: # обработка ошибки размера файлов except sr.RequestError: # обработка ошибки размера файлов
return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки return "Толи файл слишком большой, толи с ботом что-то случилось" # возвращение ошибки
Regular → Executable
View File
+28
View File
@@ -0,0 +1,28 @@
import json
def load_data():
try:
with open('users.json', 'r') as f:
return json.load(f)
except FileNotFoundError:
return {'users': [], 'chats': []}
def save_data(data_type, data_id=None):
data = load_data()
if data_id is None:
if 'static' not in data:
data['static'] = {'audio_resive': 0, 'chatGPT': 0}
if 'audio_resive' not in data['static']:
data['static'][data_type] = 0
if 'chatGPT' not in data['static']:
data['static']['chatGPT'] = 0
data['static'][data_type] += 1
with open('users.json', 'w') as f:
json.dump(data, f, indent=4)
else:
if data_id not in data[data_type]:
data[data_type].append(data_id)
with open('users.json', 'w') as f:
json.dump(data, f, indent=4)
+2 -2
View File
@@ -3,7 +3,7 @@ from functions.convert import Converter
from aiogram import types from aiogram import types
async def get_audio_messages_func(message: types.Message, logger, bot) -> None: async def get_audio_messages_func(message: types.Message, logger, bot, model) -> None:
""" """
Функция выкачивает файл, потом конвертирует его в текст, потом логирует Функция выкачивает файл, потом конвертирует его в текст, потом логирует
@@ -31,7 +31,7 @@ async def get_audio_messages_func(message: types.Message, logger, bot) -> None:
file = await bot.get_file(file_id) # ссылка для скачивая файла file = await bot.get_file(file_id) # ссылка для скачивая файла
file_dow = await bot.download_file(file.file_path) # скачанный файл file_dow = await bot.download_file(file.file_path) # скачанный файл
new_file.write(file_dow.getvalue()) # записываю new_file.write(file_dow.getvalue()) # записываю
converter = Converter(file_name, message) # запуск конвертора converter = Converter(file_name, message, model) # запуск конвертора
message_text = converter.audio_to_text() # получаю текст из конвертора message_text = converter.audio_to_text() # получаю текст из конвертора
logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, " logger.info(f"Чат {name} (ID: {message.chat.id}) обработал файл {file_name}, "
f"сервисом {converter.service}") # записываю всё в logger f"сервисом {converter.service}") # записываю всё в logger
Regular → Executable
-7
View File
@@ -35,10 +35,3 @@ def loging(message: types.Message, service: str, file_path: str, text: str, f: f
chat_title = message.chat.first_name chat_title = message.chat.first_name
else: else:
chat_title = message.chat.title chat_title = message.chat.title
print(user_id, group_id, service, time, user_name, chat_title)
conn = sqlite3.connect("db.sql")
cur = conn.cursor()
user = (user_id, group_id, service, time, user_name, chat_title)
cur.execute("INSERT INTO statistic(user_id, group_id, service, time, user_name, chat_title) "
"VALUES(?, ?, ?, ?, ?, ?);", user)
conn.commit()
Regular → Executable
+1 -1
View File
@@ -30,7 +30,7 @@ async def get_response_to_openai(message: types.Message, bot):
presence_penalty=0.0 presence_penalty=0.0
) )
await bot.send_message(message.chat.id, f"ChatGPT\n{response['choices'][0]['message']['content']}", await bot.send_message(message.chat.id, f"ChatGPT\n{response['choices'][0]['message']['content']}",
parse_mode=None, reply_to_message_id=message.message_id) parse_mode="Markdown", reply_to_message_id=message.message_id)
except Exception as e: except Exception as e:
print(e) print(e)
conn = sqlite3.connect('db.sql') conn = sqlite3.connect('db.sql')
+26
View File
@@ -0,0 +1,26 @@
from aiogram import types
from functions.file_data import load_data
async def start_stat(message: types.Message):
data = load_data()
send_message = f"""
Здравствуйте, {message.from_user.username}
➖➖➖➖➖➖➖➖➖
Мои боты созданы чтобы помогать вам с голосовыми сообщениями, а так же получить доступ к ChatGPT
➖➖➖➖➖➖➖➖➖
1️⃣ Отправив этому боту голосовое сообщение, кружок или что-то похожее вы получите его расшифровку
2️⃣ Добавив бота в чат и дав ему права читать и писать сообщение, он станет переводит все голосовые сообщения
, кружки и тому подобное
3️⃣ Так же вы можете написать боту @db_ChatGPT_bot команду /start и он расскажет как пользоваться ChatGPT из России
➖➖➖➖➖➖➖➖➖
🆓 Весь функционал ботов бесплатный
➖➖➖➖➖➖➖➖➖
Статистика:
Чатов в которых находится бот: {len(data["chats"])}
Пользователей воспользовавшихся ботом: {len(data["audio"])}
Пользователей запустивших бота: {len(data["start"])}
Ботом воспользовались {data["static"]["audio_resive"]} раз
ChatGPT ботом воспользовались {data["static"]["chatGPT"]} раз
"""
await message.reply(send_message)
Regular → Executable
View File
Regular → Executable
View File
+21 -38
View File
@@ -1,64 +1,47 @@
from aiogram.utils import executor from aiogram.utils import executor
from loguru import logger from loguru import logger
from aiogram import Bot, Dispatcher, types from aiogram import Bot, Dispatcher, types
from functions import get_audio_messages_func, openai_answer, yandex from functions import get_audio_messages_func, file_data, start_stat
import json import asyncio
import whisper
bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота bot = Bot(token="5941118321:AAG0g0keLrlnuH_9U9X6ehpFFAdOX38qeXI") # создаю объект бота
dp = Dispatcher(bot) # создаю объект слушателя dp = Dispatcher(bot) # создаю объект слушателя
logger.remove() # удаляю стандартный логер logger.remove() # удаляю стандартный логер
logger.add("static/logs/logging_log.log", level="INFO") # создаю логер logger.add("static/logs/logging_log.log", level="INFO") # создаю логер
model = whisper.load_model("tiny")
lock = asyncio.Lock()
@dp.message_handler(content_types=['new_chat_members'])
async def new_chat_members_handler(message: types.Message):
file_data.save_data('chats', message.chat.id)
@dp.message_handler(commands=['start']) # обрабатываю команду start @dp.message_handler(commands=['start']) # обрабатываю команду start
async def start(message: types.Message): async def start(message: types.Message):
file_data.save_data('start', message.from_user.id)
# получаю имя отправителя # получаю имя отправителя
if message.chat.first_name: if message.chat.first_name:
name = message.chat.first_name name = message.chat.first_name
else: else:
name = message.chat.title name = message.chat.title
logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") # записываю в логи logger.info(f"Группа {name} (ID: {message.chat.id}) запустил бота") # записываю в логи
await bot.send_message(message.chat.id, 'Привет! Отправляй голосовое, я расшифрую!') # отправляю ответное сообщение await start_stat.start_stat(message)
@dp.message_handler(commands=['statistic'])
async def statistic(message: types.Message):
await yandex.statistic(message)
@dp.message_handler(commands=['create_yandex'])
async def create_yandex(message: types.Message):
await yandex.create_yandex(message)
@dp.message_handler(commands=['r'])
async def r(message: types.Message):
await openai_answer.get_response_to_openai(message, bot)
@dp.message_handler(commands=['r_clear'])
async def r_clear(message: types.Message):
await openai_answer.clear_db(message)
@dp.message_handler(content_types=['text'])
async def not_work_user(message: types.Message):
if str(message.from_user.id) == "620318992" and message.text == "Гена, бань его" and message.reply_to_message:
with open('../not_work_user.json', 'r') as f:
data = json.load(f)
data['chat_gpt'].append(message.reply_to_message.from_user.id)
with open('../not_work_user.json', 'w') as f:
json.dump(data, f, indent=4)
await message.reply(f"@{message.reply_to_message.from_user.username} "
f"вы больше не можете со мной разговаривать")
@dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео @dp.message_handler(content_types=['voice', 'video_note', 'video']) # обрабатываю голосовые сообщения, кружки, видео
async def get_audio_messages(message: types.Message): async def get_audio_messages(message: types.Message):
await get_audio_messages_func.get_audio_messages_func(message, logger, bot) # вызываю функцию file_data.save_data('audio_resive')
if message.chat.type == 'group' or message.chat.type == "supergroup":
file_data.save_data('chats', message.chat.id)
file_data.save_data('audio', message.from_user.id)
else:
file_data.save_data('audio', message.from_user.id)
async with lock:
await get_audio_messages_func.get_audio_messages_func(message, logger, bot, model) # вызываю функцию
def start_work_bot(): # функция запуска бота def start_work_bot(): # функция запуска бота
logger.info("Бот запустился") # записываю логи logger.info("Бот запустился") # записываю логи
executor.start_polling(dp, skip_updates=True) # запускаю pooling без пропуска пропущенных сообщений executor.start_polling(dp, skip_updates=False) # запускаю pooling без пропуска пропущенных сообщений
Regular → Executable
+3
View File
@@ -2,6 +2,7 @@ from fastapi import FastAPI, Request, Form, Depends, Cookie, responses, templati
from functions.admin import is_logged_in from functions.admin import is_logged_in
from functions.admin.models import database from functions.admin.models import database
from functions.admin.templates import logins, refresh, logs, log from functions.admin.templates import logins, refresh, logs, log
import uvicorn
def Site(): def Site():
app = FastAPI() app = FastAPI()
@@ -31,3 +32,5 @@ def Site():
@app.get("/logs/{log_id}", response_class=responses.HTMLResponse) @app.get("/logs/{log_id}", response_class=responses.HTMLResponse)
async def log_response(request: Request, log_id: int, logged_in: bool = Depends(is_logged_in.is_logged_in)): async def log_response(request: Request, log_id: int, logged_in: bool = Depends(is_logged_in.is_logged_in)):
return await log.log(templates, request, log_id, logged_in) return await log.log(templates, request, log_id, logged_in)
uvicorn.run(app)
Regular → Executable
View File
Regular → Executable
+102 -59
View File
@@ -1,127 +1,170 @@
aiofiles==22.1.0 aiofiles==23.1.0
aiogram==2.23.1 aiogram==2.25.1
aiohttp==3.8.3 aiohttp==3.8.4
aiolimiter==1.0.0 aiolimiter==1.1.0
aiosignal==1.3.1 aiosignal==1.3.1
anyio==3.6.2 altair
anyio==3.7.0
APScheduler==3.10.1 APScheduler==3.10.1
async-generator==1.10 async-generator==1.10
async-timeout==4.0.2 async-timeout==4.0.2
attrs==22.1.0 attrs==23.1.0
audiosegment==0.23.0 audiosegment==0.23.0
Babel==2.9.1 Babel==2.9.1
bcrypt==4.0.1 bcrypt==4.0.1
beautifulsoup4==4.11.1 beautifulsoup4==4.12.2
BibaAndBoba==1.2.2 BibaAndBoba
boto3==1.26.13 blinker==1.6.2
botocore==1.29.13 boto3==1.26.145
cachetools==5.3.0 botocore==1.29.145
certifi==2022.9.24 cachetools==5.3.1
certifi==2023.5.7
cffi==1.15.1 cffi==1.15.1
charset-normalizer==2.1.1 charset-normalizer==3.1.0
click==8.1.3 click==8.1.3
contourpy==1.0.6 colorama==0.4.6
cryptography==38.0.3 contourpy==1.0.7
cryptography==41.0.1
curl-cffi==0.5.6
cycler==0.11.0 cycler==0.11.0
DAWG-Python==0.7.2 DAWG-Python==0.7.2
deep-translator==1.9.2 decorator==5.1.1
deep-translator==1.11.1
dill==0.3.6 dill==0.3.6
discord==2.2.2 discord==2.2.3
discord.py==2.2.2 discord.py==2.2.3
dnspython==2.3.0 dnspython==2.3.0
docopt==0.6.2 docopt==0.6.2
email-validator==1.3.1 email-validator==2.0.0.post2
entrypoints==0.4
exceptiongroup==1.1.1 exceptiongroup==1.1.1
fastapi==0.95.1 fake-useragent==1.1.3
fastapi-users==10.4.2 fastapi==0.95.2
Flask==2.2.3 fastapi-users==11.0.0
fonttools==4.38.0 Flask==2.3.2
fonttools==4.39.4
forefront==0.2.6
frozenlist==1.3.3 frozenlist==1.3.3
geographiclib==2.0 geographiclib==2.0
geopy==2.3.0 geopy==2.3.0
gitdb==4.0.10
GitPython==3.1.31
gpt4free==1.0.2
greenlet==2.0.2 greenlet==2.0.2
grpcio==1.50.0 grpcio==1.54.2
grpcio-tools==1.48.2 grpcio-tools==1.48.2
h11==0.14.0 h11==0.14.0
h2==4.1.0 h2==4.1.0
hpack==4.0.0 hpack==4.0.0
httpcore==0.16.1 httpcore==0.17.2
httpx==0.23.3 httpx==0.24.1
hyperframe==6.0.1 hyperframe==6.0.1
idna==3.4 idna==3.4
importlib-metadata==6.6.0
itsdangerous==2.1.2 itsdangerous==2.1.2
javascript==1!1.0.1 javascript==1!1.0.2
Jinja2==3.1.2 Jinja2==3.1.2
jmespath==1.0.1 jmespath==1.0.1
joblib==1.2.0 joblib==1.2.0
jsonschema==4.17.3
kiwisolver==1.4.4 kiwisolver==1.4.4
loguru==0.6.0 loguru==0.7.0
lxml==4.9.2 lxml==4.9.2
magic-filter==1.0.9 magic-filter==1.0.9
makefun==1.15.1 makefun==1.15.1
markdown-it-py==2.2.0
MarkupSafe==2.1.2 MarkupSafe==2.1.2
matplotlib==3.6.2 matplotlib==3.7.1
multidict==6.0.3 mdurl==0.1.2
multidict==6.0.4
multiprocess==0.70.14 multiprocess==0.70.14
mutagen==1.46.0 mutagen==1.46.0
nltk==3.8 names==0.3.0
numpy==1.23.5 nltk==3.8.1
openai==0.27.4 numpy==1.24.3
openai==0.27.7
outcome==1.2.0 outcome==1.2.0
packaging==22.0 packaging==23.1
pandas==1.4.3 pandas
passlib==1.7.4 passlib==1.7.4
pathos==0.3.0 pathos==0.3.0
Pillow==9.4.0 Pillow==9.5.0
pip-review==1.3.0
pox==0.3.2 pox==0.3.2
ppft==1.7.6.6 ppft==1.7.6.6
prettytable==3.7.0
protobuf==3.19.6 protobuf==3.19.6
pyarrow==12.0.0
pycparser==2.21 pycparser==2.21
pydantic==1.10.2 pydantic==1.10.8
pydeck==0.8.1b0
pydub==0.25.1 pydub==0.25.1
PyExecJS==1.5.1 PyExecJS==1.5.1
Pygments==2.15.1
PyJWT==2.6.0 PyJWT==2.6.0
pymailtm==1.1.1
pymorphy2==0.9.1 pymorphy2==0.9.1
pymorphy2-dicts-ru==2.4.417127.4579844 pymorphy2-dicts-ru==2.4.417127.4579844
Pympler==1.0.1
pyparsing==3.0.9 pyparsing==3.0.9
PyPasser==0.0.5
pyperclip==1.8.2
pyrsistent==0.19.3
PySocks==1.7.1 PySocks==1.7.1
pyTelegramBotAPI==4.7.1 pyTelegramBotAPI==4.12.0
python-dateutil==2.8.2 python-dateutil==2.8.2
python-dotenv==1.0.0 python-dotenv==1.0.0
python-multipart==0.0.6 python-multipart==0.0.6
python-telegram-bot==20.1 python-telegram-bot==20.3
pytz==2022.6 pytz==2023.3
pytz-deprecation-shim==0.1.0.post0 pytz-deprecation-shim==0.1.0.post0
regex==2022.10.31 random-username==1.0.2
requests==2.28.1 regex==2023.5.5
rfc3986==1.5.0 requests==2.31.0
rfc3986==2.0.0
rich==13.4.1
rnnoise-wrapper @ git+https://github.com/Desklop/RNNoise_Wrapper@10647eba5c1dc678dc3fd443d111400792fefef6 rnnoise-wrapper @ git+https://github.com/Desklop/RNNoise_Wrapper@10647eba5c1dc678dc3fd443d111400792fefef6
s3transfer==0.6.0 s3transfer==0.6.1
scipy==1.10.0 scipy==1.10.1
selenium==4.8.3 selenium==4.9.1
six==1.16.0 six==1.16.0
smmap==5.0.0
sniffio==1.3.0 sniffio==1.3.0
sortedcontainers==2.4.0 sortedcontainers==2.4.0
soupsieve==2.3.2.post1 soupsieve==2.4.1
speechkit==2.1.1 speechkit==2.2.2
SpeechRecognition==3.8.1 SpeechRecognition==3.8.1
SQLAlchemy==2.0.10 SQLAlchemy==2.0.15
starlette==0.26.1 srt==3.5.3
tornado==6.2 starlette==0.27.0
tqdm==4.64.1 streamlit==1.21.0
translators==5.5.6 tls-client==0.2.1
toml==0.10.2
toolz==0.12.0
tornado==6.3.2
tqdm==4.65.0
translators==5.7.6
trio==0.22.0 trio==0.22.0
trio-websocket==0.10.2 trio-websocket==0.10.2
typing_extensions==4.4.0 TwoCaptcha==0.0.1
tzdata==2022.7 typing_extensions==4.6.3
tzlocal==4.3 tzdata==2023.3
tzlocal==5.0.1
urllib3==1.26.12 urllib3==1.26.12
uvicorn==0.21.1 uvicorn==0.22.0
validators==0.20.0
vk-api==11.9.9 vk-api==11.9.9
vosk==0.3.45
watchdog==3.0.0
wcwidth==0.2.6
webdriver-manager==3.8.6 webdriver-manager==3.8.6
webrtcvad==2.0.10 webrtcvad==2.0.10
Werkzeug==2.2.3 websocket-client==1.5.2
websockets==11.0.3
Werkzeug==2.3.4
wsproto==1.2.0 wsproto==1.2.0
yandex-s3==0.1.1 yandex-s3==0.1.1
yarl==1.8.2 yarl==1.9.2
yaweather==1.2.2 yaweather==1.2.2
zipp==3.15.0
pytube~=15.0.0
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
+1
View File
@@ -0,0 +1 @@
print(1)
Executable
+48
View File
@@ -0,0 +1,48 @@
{
"start": [
620318992,
1144937686,
5142202213,
6285339504,
5807099397,
1816362641,
5544944943,
107869711
],
"r": [
620318992,
1144937686,
6263682066,
1484475666,
651112197,
5142202213,
1476571560,
725117322
],
"chats": [
-1001977366032,
-1001887458183,
-1001913006666,
-1001560258527
],
"audio": [
1144937686,
620318992,
211473217,
1484475666,
651112197,
190475953,
5807099397,
1035585172,
5142202213,
5798798097,
5563487236,
6285339504,
864790102,
107869711
],
"static": {
"audio_resive": 2,
"chatGPT": 0
}
}
Regular → Executable
View File