Skip to content

Использовал aiortc и дискорд воис для интеграции чатрулетки Nekto.me в дискорд голосовые каналы

Notifications You must be signed in to change notification settings

mmkhitaryan/nektobot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nektobot

Есть много анонимных чат рулеток с голосом в вебе, их можно использовать когда скучно чтобы пообщаться с незнакомыми людьми. Дело в том что иногда хочется разговаривать не просто с 1 человеком, а с группой. Например, когда сидишь с друзьями в дискорде и вы хотите с кем-то пообщаться.

Для создания этого пет-проекта мне пришлось погрузиться в детали как работает архитектура WebRTC, и голосового апи дискорда. Хотя я и использовал aiortc, но все равно нужно было хотя бы общее понимание архитектур этих технологий. WebRTC это бесконечная чёрная дыра где вы можете часами изучать её внутренности, и все равно вы будете знать лишь малую часть.

Бот слушает команду /start

После получения этой команды он подключается к чатрулетке и ищет собеседника, 
и заходит в голосовой канал дискорда в котором был автор, пославший эту команду.

После того как чатрулетка выдала собеседника, aiortc подключается к собеседнику по протоколу PeerConnection и начинается отправка друг другу данных.
Собеседник чатрулетки когда говорит, мы слышим его через бота. Когда говорим мы, собеседник тоже слышит нас через дискорд бота.

Весь код тут это просто прототип для понимания что возможно ли вообще такое или нет. Для создания более продакшен-реди версии стоит создать кастомные интерфейсы у библиотек которые использовались, разобратся подробнее в деталях протоколов WebRTC и дискорда. Вся проблема в том, что имплементация голосового апи в discordpy из коробки позволяет только слать аудио. Но для нашей задачи нужно ещё и принимать аудио.

Для начала можно попробовать обойтись созданием чисто нативного питон голосового клиента, который будет направлять звук на динамики из дискорда и наоборот.

Я нашел что в Javascript версии дискорд бот библиотеки реализованы двухсторонние аудио: https://github.com/discordjs/discord.js/tree/main/packages/voice Его можно попробовать использовать как референс для создания питон имплементации, либо попробовать использовать голосовые апи раздельно, и использовать IPC чтобы питон говорил с чатрулеткой через aiortc, а джаваскрипт говорил только с дискордом.

UPD: Надо сделать мини сервис на PeerJS и попробовать сначала интегрировать дискорд с ним, чтобы можно было понять хорошо ли передаётся звук итд. А то используя сразу чатрулетку невозможно понять хорошо ли передаётся звук. Разве что спрашивать у самих людей с чатрулетки, но это несовсем технически правильно.

Либо попробовать запустить копию фронтенда некто с запатченной логикой вебсокета, чтобы матчинг система была только с самим собой и можно было таким образом тестировать связь.

UPD: Хорошая имплементация WebRTC и дискорд клиента есть в golang: https://github.com/bwmarrin/discordgo/blob/master/examples/voice_receive/main.go Её буду использовать для следующей версии говорилки.

About

Использовал aiortc и дискорд воис для интеграции чатрулетки Nekto.me в дискорд голосовые каналы

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages