mirror of https://github.com/adamdruppe/arsd.git
slowly making more reliable, using the log functionality too
This commit is contained in:
parent
6234e64d7f
commit
f907585145
59
discord.d
59
discord.d
|
|
@ -156,7 +156,7 @@ class DiscordUser : DiscordMentionable {
|
||||||
// PUT /guilds/{guild.id}/members/{user.id}/roles/{role.id}
|
// PUT /guilds/{guild.id}/members/{user.id}/roles/{role.id}
|
||||||
|
|
||||||
auto thing = api.rest.guilds[role.guild.id].members[this.id].roles[role.id];
|
auto thing = api.rest.guilds[role.guild.id].members[this.id].roles[role.id];
|
||||||
writeln(thing.toUri);
|
//writeln(thing.toUri);
|
||||||
|
|
||||||
auto result = api.rest.guilds[role.guild.id].members[this.id].roles[role.id].PUT().result;
|
auto result = api.rest.guilds[role.guild.id].members[this.id].roles[role.id].PUT().result;
|
||||||
}
|
}
|
||||||
|
|
@ -165,7 +165,7 @@ class DiscordUser : DiscordMentionable {
|
||||||
// DELETE /guilds/{guild.id}/members/{user.id}/roles/{role.id}
|
// DELETE /guilds/{guild.id}/members/{user.id}/roles/{role.id}
|
||||||
|
|
||||||
auto thing = api.rest.guilds[role.guild.id].members[this.id].roles[role.id];
|
auto thing = api.rest.guilds[role.guild.id].members[this.id].roles[role.id];
|
||||||
writeln(thing.toUri);
|
//writeln(thing.toUri);
|
||||||
|
|
||||||
auto result = api.rest.guilds[role.guild.id].members[this.id].roles[role.id].DELETE().result;
|
auto result = api.rest.guilds[role.guild.id].members[this.id].roles[role.id].DELETE().result;
|
||||||
}
|
}
|
||||||
|
|
@ -296,10 +296,10 @@ class SlashCommandHandler {
|
||||||
var result = api.rest.
|
var result = api.rest.
|
||||||
interactions[commandArgs.interactionId][commandArgs.interactionToken].callback
|
interactions[commandArgs.interactionId][commandArgs.interactionToken].callback
|
||||||
.POST(reply).result;
|
.POST(reply).result;
|
||||||
writeln(result.toString);
|
// writeln(result.toString);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
import std.stdio; writeln(commandArgs);
|
// import std.stdio; writeln(commandArgs);
|
||||||
writeln(e.toString());
|
logSwallowedException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -497,8 +497,7 @@ ync def something(interaction:discord.Interaction):
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sendHandlerReply(T)(T ret, scope InteractionReplyHelper replyHelper, bool ephemeral) {
|
static void sendHandlerReply(T)(T ret, scope InteractionReplyHelper replyHelper, bool ephemeral) {
|
||||||
import std.conv; // FIXME
|
replyHelper.reply(toStringInternal(ret), ephemeral);
|
||||||
replyHelper.reply(to!string(ret), ephemeral);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void registerAll(T)(T t) {
|
void registerAll(T)(T t) {
|
||||||
|
|
@ -665,7 +664,8 @@ class DiscordGatewayConnection {
|
||||||
|
|
||||||
+/
|
+/
|
||||||
protected void handleWebsocketClose(WebSocket.CloseEvent closeEvent) {
|
protected void handleWebsocketClose(WebSocket.CloseEvent closeEvent) {
|
||||||
import std.stdio; writeln(closeEvent);
|
logger.info(i"$(closeEvent.toString())");
|
||||||
|
|
||||||
if(heartbeatTimer)
|
if(heartbeatTimer)
|
||||||
heartbeatTimer.cancel();
|
heartbeatTimer.cancel();
|
||||||
|
|
||||||
|
|
@ -730,12 +730,13 @@ class DiscordGatewayConnection {
|
||||||
mostRecentHeartbeatAckRecivedAt = MonoTime.currTime;
|
mostRecentHeartbeatAckRecivedAt = MonoTime.currTime;
|
||||||
break;
|
break;
|
||||||
case OpCode.Reconnect:
|
case OpCode.Reconnect:
|
||||||
writeln("reconnecting");
|
logger.info(i"Reconnecting discord websocket");
|
||||||
|
|
||||||
this.close(4999, "Reconnect requested");
|
this.close(4999, "Reconnect requested");
|
||||||
reconnectAndResume();
|
reconnectAndResume();
|
||||||
break;
|
break;
|
||||||
case OpCode.InvalidSession:
|
case OpCode.InvalidSession:
|
||||||
writeln("starting new session");
|
logger.info(i"Starting new discord session");
|
||||||
|
|
||||||
close();
|
close();
|
||||||
connect(); // try starting a brand new session
|
connect(); // try starting a brand new session
|
||||||
|
|
@ -746,12 +747,7 @@ class DiscordGatewayConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void reconnectAndResume() {
|
protected void reconnectAndResume() {
|
||||||
this.websocket_ = new WebSocket(Uri(this.resume_gateway_url));
|
websocketConnectInLoop(Uri(this.resume_gateway_url));
|
||||||
|
|
||||||
websocket.onmessage = &handleWebsocketMessage;
|
|
||||||
websocket.onclose = &handleWebsocketClose;
|
|
||||||
|
|
||||||
websocketConnectInLoop();
|
|
||||||
|
|
||||||
var resumeData = var.emptyObject;
|
var resumeData = var.emptyObject;
|
||||||
resumeData.token = this.token;
|
resumeData.token = this.token;
|
||||||
|
|
@ -861,7 +857,7 @@ class DiscordGatewayConnection {
|
||||||
private MonoTime mostRecentHeartbeatAckRecivedAt;
|
private MonoTime mostRecentHeartbeatAckRecivedAt;
|
||||||
|
|
||||||
protected void sendHeartbeat() {
|
protected void sendHeartbeat() {
|
||||||
arsd.core.writeln("sendHeartbeat");
|
logger.info(i"heartbeat");
|
||||||
sendWebsocketCommand(OpCode.Heartbeat, var(lastSequenceNumberReceived));
|
sendWebsocketCommand(OpCode.Heartbeat, var(lastSequenceNumberReceived));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -894,8 +890,8 @@ class DiscordGatewayConnection {
|
||||||
// so we'll do that one-off (but with a non-zero time
|
// so we'll do that one-off (but with a non-zero time
|
||||||
// since my timers don't like being run twice in one loop
|
// since my timers don't like being run twice in one loop
|
||||||
// iteration) then that first one will set the repeating time
|
// iteration) then that first one will set the repeating time
|
||||||
import std.random;
|
import arsd.random;
|
||||||
auto firstBeat = std.random.uniform(10, msecs);
|
auto firstBeat = arsd.random.uniform(10, msecs);
|
||||||
heartbeatTimer.changeTime(firstBeat, false);
|
heartbeatTimer.changeTime(firstBeat, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -922,12 +918,7 @@ class DiscordGatewayConnection {
|
||||||
cachedGatewayUrl = obj.url.get!string;
|
cachedGatewayUrl = obj.url.get!string;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.websocket_ = new WebSocket(Uri(cachedGatewayUrl));
|
websocketConnectInLoop(Uri(cachedGatewayUrl));
|
||||||
|
|
||||||
websocket.onmessage = &handleWebsocketMessage;
|
|
||||||
websocket.onclose = &handleWebsocketClose;
|
|
||||||
|
|
||||||
websocketConnectInLoop();
|
|
||||||
|
|
||||||
var d = var.emptyObject;
|
var d = var.emptyObject;
|
||||||
d.token = token;
|
d.token = token;
|
||||||
|
|
@ -941,7 +932,11 @@ class DiscordGatewayConnection {
|
||||||
sendWebsocketCommand(OpCode.Identify, d);
|
sendWebsocketCommand(OpCode.Identify, d);
|
||||||
}
|
}
|
||||||
|
|
||||||
void websocketConnectInLoop() {
|
/+
|
||||||
|
SocketOSException needs full reconnect
|
||||||
|
+/
|
||||||
|
|
||||||
|
void websocketConnectInLoop(Uri uri) {
|
||||||
// FIXME: if the connect fails we should set a timer and try
|
// FIXME: if the connect fails we should set a timer and try
|
||||||
// again, but if it fails then, quit. at least if it is not a websocket reply
|
// again, but if it fails then, quit. at least if it is not a websocket reply
|
||||||
// cuz it could be discord went down or something.
|
// cuz it could be discord went down or something.
|
||||||
|
|
@ -952,9 +947,21 @@ class DiscordGatewayConnection {
|
||||||
|
|
||||||
try_again:
|
try_again:
|
||||||
|
|
||||||
|
this.websocket_ = new WebSocket(uri);
|
||||||
|
websocket.onmessage = &handleWebsocketMessage;
|
||||||
|
websocket.onclose = &handleWebsocketClose;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.websocket_.connect();
|
this.websocket_.connect();
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
|
// it disconnects after 30 days rn w/
|
||||||
|
// std.socket.SocketOSException@std/socket.d(2897): Unable to connect socket: Transport endpoint is already connected
|
||||||
|
// and idk the root cause, it has invalid session at first
|
||||||
|
|
||||||
|
.destroy(this.websocket_);
|
||||||
|
|
||||||
|
logSwallowedException(e);
|
||||||
|
|
||||||
import core.thread;
|
import core.thread;
|
||||||
Thread.sleep(d);
|
Thread.sleep(d);
|
||||||
d *= 2;
|
d *= 2;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue