
Eldar
03.08.2018
10:44:58

Maryam
03.08.2018
10:45:28

ivan
03.08.2018
10:46:09
Такая задача, нужно с помощью python подключиться к каналу на сервере Discord. Смотрю debug, повторяю действия
ws = websocket.create_connection("wss://us-east980.discord.gg/?v=4")
data = '{"op":0,"d":{"server_id":"386088604864217089","user_id":"459769962370695178","session_id":"945e73751f8824797c1daf5a42aa5d05","token":"3c94d0f3b4f1eef0","video":True}}'
ws.send(data)
print(ws.recv())
В ответ должно прийти 2 сообщения.
Приходит первое -
{"op":8,"d":{"v":4,"heartbeat_interval":13750.0}}
А вот второе я не понимаю как получить, но оно должно прийти следом
{"op":2,"d":{"ssrc":1,"port":50368,"modes":["xsalsa20_poly1305_lite","xsalsa20_poly1305_suffix","xsalsa20_poly1305"],"ip":"45.35.130.202"}}
В цикле while True получать нужно сообщения

Сергей
03.08.2018
10:46:53
виноват=(
ну внимательнее будь в следующий раз

Google

?
03.08.2018
10:47:06

ivan
03.08.2018
10:47:18
Да

?
03.08.2018
10:48:11
Да
После первого сообщения сервер закрывает соединение

ivan
03.08.2018
10:48:26
?
А ты своё сообщение отправлял ws.send?

?
03.08.2018
10:49:10
Конечно, я кидал же фрагмент
Возможно это из за отправляемого токена, я так и не понял откуда его взять

ivan
03.08.2018
10:50:16
ну, если б был трабл с токеном, то ты бы не установил даже соединения, вероятней всего


?
03.08.2018
10:50:17
Нашел, js, который его отдает, пока еще не разобрался с ним
! function() {
if (null != window.WebSocket) {
var n = function(n) {
try {
var e = localStorage.getItem(n);
return null == e ? null : JSON.parse(e)
} catch (n) {
return null
}
},
e = n("token"),
o = n("gatewayURL");
if (e && o) {
var r = null != window.DiscordNative || null != window.require ? "etf" : "json",
t = o + "/?encoding=" + r + "&v=6";
void 0 !== window.Uint8Array && (t += "&compress=zlib-stream"), console.log("[FAST CONNECT] " + t + ", encoding: " + r + ", version: 6");
var a = new WebSocket(t);
a.binaryType = "arraybuffer";
var i = Date.now(),
s = {
open: !1,
gateway: t,
messages: []
};
a.onopen = function() {
console.log("[FAST CONNECT] connected in " + (Date.now() - i) + "ms"), s.open = !0
}, a.onclose = a.onerror = function() {
window._ws = null
}, a.onmessage = function(n) {
s.messages.push(n)
}, window._ws = {
ws: a,
state: s
}
}
}
}();


ivan
03.08.2018
10:50:25
Нашел, js, который его отдает, пока еще не разобрался с ним
! function() {
if (null != window.WebSocket) {
var n = function(n) {
try {
var e = localStorage.getItem(n);
return null == e ? null : JSON.parse(e)
} catch (n) {
return null
}
},
e = n("token"),
o = n("gatewayURL");
if (e && o) {
var r = null != window.DiscordNative || null != window.require ? "etf" : "json",
t = o + "/?encoding=" + r + "&v=6";
void 0 !== window.Uint8Array && (t += "&compress=zlib-stream"), console.log("[FAST CONNECT] " + t + ", encoding: " + r + ", version: 6");
var a = new WebSocket(t);
a.binaryType = "arraybuffer";
var i = Date.now(),
s = {
open: !1,
gateway: t,
messages: []
};
a.onopen = function() {
console.log("[FAST CONNECT] connected in " + (Date.now() - i) + "ms"), s.open = !0
}, a.onclose = a.onerror = function() {
window._ws = null
}, a.onmessage = function(n) {
s.messages.push(n)
}, window._ws = {
ws: a,
state: s
}
}
}
}();
. сделай нормальный гист на гитхабе
Или на pastebin
Это не читательно


?
03.08.2018
10:50:54

ivan
03.08.2018
10:51:11

Google

?
03.08.2018
10:51:24
https://pastebin.com/ZkyAHANV

Alexey
03.08.2018
10:51:41
Есть предложение для разработчиков/начинающих стартаперов.
Я – senior дизайнер по enterprise/SaaS/веб/мобилки.
Сейчас нахожусь в активном поиске работы уже несколько месяцев, потому что мне постоянно то компания, то проекты не подходят. Но я не могу не заниматься дизайном и простаивать. Я делаю или бесплатно или очень дорого. Поэтому предложение:
Готов бесплатно выделять +-8 часов в неделю на разработку вашего продукта, начиная от полного проектирования по бизнес-процессам/идеям и заканчивая hi-fi мокапами. Вы разработчик, который хочет сделать проект для портфолио с крутым дизайном? Пишите мне. Вы стартапер, у которого нет бюджета на хороший дизайн? Пишите мне.
С вас какие-то гарантии, что проект будет в продакшене и отсутствие NDA.

Сергей
03.08.2018
10:51:58

ivan
03.08.2018
10:52:09

?
03.08.2018
10:52:23
https://pastebin.com/tUu3XfPS

ivan
03.08.2018
10:56:05

?
03.08.2018
10:56:19
Секунду

ivan
03.08.2018
10:56:31
В хэдерах
Authorization: TOKEN_TYPE TOKEN

?
03.08.2018
10:56:51
Auth Это токен аккаунта клиента, он есть в примере в пасте
9cccb1fb19f3517c Этот токен каждый раз уникальные и отправляется в websocket в data
И есть еще Sec-WebSocket-Key: fISla5WWbtPdR9pCYaYAyQ==
Это в шапке

ivan
03.08.2018
10:57:43
В пэйстбин, ты когда обычный запросы делаешь без вебсокетов, нормально работает?

Eldar
03.08.2018
10:57:50

?
03.08.2018
10:57:53
Да
А подключение именно в разговорный канал не особо понимаю как

ivan
03.08.2018
11:00:24
Да
В вебсокетах нужно тоже передавать хэдэры

?
03.08.2018
11:01:28
Имеешь ввиду Auth и Sec-WebSocket?

Google

ivan
03.08.2018
11:01:36
Да

?
03.08.2018
11:02:17
Секунду
Спасибо

ivan
03.08.2018
11:03:50
Заработало?
По идее не должно было
Почитал дальше discord api
Тебе нужно при подключении слать специальное сообщение для идентификации

?
03.08.2018
11:10:17
Да, я понял
Спасибо
Получил 400 ответ
Буду смотреть дальше сейчас

Valery
03.08.2018
11:13:49
используете сырой дискорд апи?

Valery
03.08.2018
11:13:55
есть жи норм библа для него

?
03.08.2018
11:14:06
Я не использую либы вовсе

ivan
03.08.2018
11:14:14
А апи реально сырой

?
03.08.2018
11:14:28
Лучше писать всё самому, мое мнение. Больше понимания

ivan
03.08.2018
11:14:30
Вот это - это геморрой

Valery
03.08.2018
11:14:40
больше трудозатрат
меньше профита

Google

?
03.08.2018
11:14:57
Я удовольствие от этого получию)

Вупи
03.08.2018
11:15:07
Зато больше понимания, как работают вещи

?
03.08.2018
11:15:09
Это интересно

ivan
03.08.2018
11:15:23

?
03.08.2018
11:15:44
Я уже ее учу постеменно
Крыша едет с этой Django

ivan
03.08.2018
11:16:02
Библиотеки придуманы для того, чтобы люди не придумывали свои велосипеды и не тратили кучу времени на рутинные задачи

Valery
03.08.2018
11:16:03
Я удовольствие от этого получию)
вот где у тебя реально будет безысходность, так это при работе с твич апи. На него нормальных либок питонячих нет, поэтому например лично мне пришлось писать свою

Admin
ERROR: S client not available

?
03.08.2018
11:16:26
Я уже работал с ним, писал реггер ботов

ivan
03.08.2018
11:17:11

Вупи
03.08.2018
11:17:24
@Siouan, ты же для себя делаешь?

?
03.08.2018
11:17:34
Да

Вупи
03.08.2018
11:17:47
Ну вот, в чём проблема потратить чуть больше времени?

Tigran
03.08.2018
11:18:32

?
03.08.2018
11:19:02

Вупи
03.08.2018
11:19:30

?
03.08.2018
11:19:51
асм?

Google

1NF3sted
03.08.2018
11:20:21

ivan
03.08.2018
11:24:13

?
03.08.2018
11:24:25
А, понял
Я знаю его частично, но в своих задачах так и не нашел ему применения

ivan
03.08.2018
11:24:53
Это максимально приближенный язык к ноликам и единичкам)0

?
03.08.2018
11:25:09
Ну да)

ivan
03.08.2018
11:25:14
Ты ведь даже для создания http запросов либы используешь
Так что так или иначе, ты зависим от библиотек

?
03.08.2018
11:25:50
Я имею ввиду библиотеки ресурсов

Billur
03.08.2018
11:26:29
https://app.codesignal.com/signup/QnksP55jrmsfj96N4/main

ivan
03.08.2018
11:26:51

?
03.08.2018
11:27:11
Например библиотеки телеграмма или того же дискорда
Мне не нужно из них всё, а отдельные фрагменты я могу и сам написать

ivan
03.08.2018
11:27:50
Ну, в requests ты тоже не всё используешь
Я бы даже сказал даже не половину

?
03.08.2018
11:28:23
Просто зачем разбираться как работает их библиотека, когда можно смотреть их api и видеть работу самого ресурса
requests Я бы отнес к стандартным библиотекам python, хотя она в них и не входит

ivan
03.08.2018
11:29:04

?
03.08.2018
11:30:12
Возможно
Хотя на мой взгляд Django слишком крупный проект, чтобы быть просто библиотекой

ivan
03.08.2018
11:30:47
Так это и не библиотека
Это фреймворк