Merge branch 'main' into updating-interactions

This commit is contained in:
Killer Boss Original 2023-08-20 15:19:10 +02:00 committed by GitHub
commit a70b976313
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 95 additions and 73 deletions

View file

@ -1,3 +1,13 @@
# 1.3.0
- Renamed `calculateIntents` to `intentsCalculator`
- Add set slashcommands
- Add GuildDiscoverySplash
- Adding Docs in Guild Class
- Fix `guild_icon`
- Fix `guild_splash`
- Removed `base_image`
- Removed `notUpdatedGuild` from UnavailableGuild
# 1.2.0
- Add `client`
- Add Event Emitter/Listener (`client.on`)

View file

@ -1,3 +1,4 @@
import '../images/guild_discovery_splash.dart';
import '../images/guild_icon.dart';
import '../../requests.dart';
@ -17,23 +18,28 @@ class Guild {
MemberManager? members;
RoleManager? roles;
// Param guild create | fetch | fetch-servers
/// The guild's id <br>
/// GuildCreate, GuildUpdate, GuildDelete, FetchOneGuild, FetchAllGuild
/// The guild's id
late String id;
/// Whether the guild is available to access. If it is not available, it indicates a server outage
/// GuildCreate, GuildDelete
/// FetchOneGuild, FetchAllGuild, GuildUpdate
late bool unavailable;
late String name; // x | x | x
late GuildIcon? icon; // x | x | x
late String? iconHash; // x | x |
String? splashHash; // x | x |
GuildSplash? splash;
String? discoverySplash; // x | x |
bool? appIsOwner; // | | x
Future<Member>? owner; // | |
String? ownerId; // x | x |
bool unavailable = false;
/// The name of this guild
late String name;
/// The icon hash of this guild
late String? iconHash;
/// The icon of this guild
late GuildIcon? icon;
/// The hash of the guild invite splash image
late String? splashHash;
/// The guild invite splash image of this guild
late GuildSplash? splash;
/// The hash of the guild discovery splash image
late String? discoverySplashHash;
/// The guild discovery splash image of this guild
late GuildDiscoverySplash? discoverySplash;
/// The owner of this guild
late Future<Member>? owner;
/// The owner id of this guild
String? ownerId;
String? permissions; // | | x
String? afkChannelId; // x | x |
int? afkTimeout; // x | x |
@ -66,6 +72,7 @@ class Guild {
String? joinedAt; // x | |
bool? large; // x | |
int? memberCount; // x | |
// Param guild create | fetch | fetch-servers
Guild(this._sender, Map data) {
id = data["id"];
@ -93,27 +100,32 @@ class Guild {
roles = RoleManager([]);
}
unavailable = false;
name = data["name"];
if (data["icon"] != null) {
icon = GuildIcon(data["icon"], id);
iconHash = data["icon_hash"];
if (iconHash != null) {
icon = GuildIcon(iconHash!, id);
} else {
icon = null;
}
iconHash = data["icon_hash"];
splashHash = data["splash"];
if (splashHash != null) {
splash = GuildSplash(splashHash.toString(), id);
splash = GuildSplash(splashHash!, id);
} else {
splash = null;
}
if (data["discovery_splash"] != null) {
discoverySplash = data["discovery_splash"];
discoverySplashHash = data["discovery_splash"];
if (discoverySplashHash != null) {
discoverySplash = GuildDiscoverySplash(discoverySplashHash!, id);
} else {
discoverySplash = null;
}
appIsOwner = data["owner"];
ownerId = data["owner_id"];
if (ownerId != null) {
owner = members?.fetch(ownerId.toString());
owner = members!.fetch(ownerId.toString());
} else {
owner = null;
}

View file

@ -1,11 +1,9 @@
import "guild.dart";
/// A guild involved in a server outage.
class UnavailableGuild {
/// The guild's id
late String id;
late bool unavailable;
late Guild? notUpdatedGuild;
/// Whether the guild is available to access. If it is not available, it indicates a server outage
bool unavailable = true;
UnavailableGuild(this.id, { this.notUpdatedGuild }) {
unavailable = true;
}
UnavailableGuild(this.id);
}

View file

@ -1,4 +0,0 @@
class BaseImage {
late String hash;
BaseImage(this.hash);
}

View file

@ -0,0 +1,10 @@
class GuildDiscoverySplash {
late String id;
late String hash;
GuildDiscoverySplash(this.hash, this.id);
String url({String? extension = "jpeg"}) {
return "https://cdn.discordapp.com/discovery-splashes/$id/$hash.$extension";
}
}

View file

@ -1,11 +1,8 @@
import 'base_image.dart';
class GuildIcon extends BaseImage {
class GuildIcon {
late String id;
late String hash;
GuildIcon(String hash, this.id) : super(hash) {
this.hash = hash;
}
GuildIcon(this.hash, this.id);
String url({String? extension = "jpeg"}) {
return "https://cdn.discordapp.com/icons/$id/$hash.$extension";

View file

@ -1,11 +1,8 @@
import 'base_image.dart';
class GuildSplash extends BaseImage {
class GuildSplash {
late String id;
late String hash;
GuildSplash(String hash, this.id) : super(hash) {
this.hash = hash;
}
GuildSplash(this.hash, this.id);
String url({String? extension = "jpeg"}) {
return "https://cdn.discordapp.com/splashes/$id/$hash.$extension";

View file

@ -21,7 +21,7 @@ final apiURL = "https://discord.com/api/v$version";
/// This function calculate the intent number required from the gateway.
/// [intents] is a list of multiples of two. You can use GatewayIntentBits class.
/// Return a number.
int calculateIntents(List<int> intents) {
int intentsCalculator(List<int> intents) {
int intentsNumber = 0;
for (var element in intents) {
@ -45,6 +45,7 @@ class Client extends EventEmitter {
late User user;
late CommandManager commands;
/// Create a new Client.
/// [intents] Intents to enable for this connection, it's a multiple of two.
Client({this.intents = 0});
@ -96,23 +97,10 @@ class Client extends EventEmitter {
});
}
Sender sender = Sender(token);
var i = await sender.fetchGuilds(withCounts: true);
late Sender sender;
late int n;
List<Guild> gg = [];
for (dynamic g in i) {
gg.add(Guild(sender, g));
}
channels = ChannelManager(sender, [], main: true);
sender.channels = channels;
guilds = GuildManager(sender, gg);
int n = i.length;
ws.listen((event) {
ws.listen((event) async {
event = json.decode(event);
switch (event["op"]) {
@ -132,6 +120,24 @@ class Client extends EventEmitter {
switch (eventName) {
case "READY":
sender = Sender(token, event["d"]["user"]["id"]);
var i = await sender.fetchGuilds(withCounts: true);
List<Guild> gg = [];
for (dynamic g in i) {
gg.add(Guild(sender, g));
}
channels = ChannelManager(sender, [], main: true);
sender.channels = channels;
guilds = GuildManager(sender, gg);
n = i.length;
commands["set"] = sender.setCommands;
resumeGatewayURL = event["d"]["resume_gateway_url"];
sessionID = event["d"]["session_id"];
user = User(event["d"]["user"]);
@ -142,9 +148,6 @@ class Client extends EventEmitter {
case "GUILD_CREATE":
if (guilds.cache.has(event["d"]["id"])) {
Guild oldGuild = guilds.cache.get(event["d"]["id"]);
if (oldGuild.appIsOwner != null) {
event['d']["owner"] = oldGuild.appIsOwner;
}
if (oldGuild.permissions != null) {
event['d']["permissions"] = oldGuild.permissions;
}
@ -160,13 +163,11 @@ class Client extends EventEmitter {
}
break;
case "GUILD_DELETE":
dynamic guild;
if (guilds.cache.has(event["d"]["id"])) {
guild = guilds.cache.get(event["d"]["id"]);
guilds.cache.set(event["d"]["id"], UnavailableGuild(event["d"]["id"], notUpdatedGuild: guild));
} else {
guild = event["d"];
guilds.cache.delete(event["d"]["id"]);
guilds.cache.set(event["d"]["id"], UnavailableGuild(event["d"]["id"],));
}
var guild = event["d"];
emit("GUILD_DELETE", guild);
break;
case "INTERACTION_CREATE":

View file

@ -38,11 +38,12 @@ Future<String> requestWebSocketURL() async {
class Sender {
final String? _token;
final String id;
Map<String, String> headers = {};
dynamic channels;
String? id;
Sender(this._token) {
Sender(this._token, this.id) {
headers = {
"Content-Type": "application/json",
"Authorization": "Bot $_token",