Hi,
ich bin grade am Discord Bot für den Discord Server des Forums dran. Ich bekomme noch einen Nullpointer, es sei für den Verweis keine Objektinstanz festgelegt.
Damit der Bot bei Events etwas posten kann, muss er den Server suchen, damit er sich die Lobby raussuchen kann und dort schreiben kann. Server und Lobby haben eine ID. Ich kann also schreiben
|
C#-Quelltext
|
1
|
Channel lobby = client.GetServer(serverId).GetChannel(lobbyId);
|
Interessanterweise schmeißt er den Nullpointer bei
|
C#-Quelltext
|
1
|
client.GetServer(serverId);
|
Mit dem Debugger konnte ich das mal per
|
C#-Quelltext
|
1
|
Server s = client.GetServer(serverId);
|
testen. Server- und LobbyId habe ich schon abgeglichen, die müssten stimmen.
Vielleicht gibt es ja auch ein anderes Problem, ich komme grade nicht drauf. Events habe ich in einer separaten Klasse, ebenfalls Commands, damit man den Bot in Zukunft kräftig erweitern kann, falls gewünscht. Es wäre super, wenn jemand sich mal hier den Ausschnitt angucken kann und mir sagen kann, wieso er sich nicht den Server holen kann.
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
internal class Bot
{
public Bot() // Der Haupteinstiegspunkt
{
var client = new DiscordClient();
client = new DiscordClient(x =>
{
x.LogLevel = LogSeverity.Info;
});
client.UsingCommands(x =>
{
x.PrefixChar = '!';
x.AllowMentionPrefix = true;
});
new EventStore(client, serverId, adminId, lobbyId); // Alle Events sind dort hinterlegt
new CommandStore(client, serverId); // Alle Commands sind dort hinterlegt
client.ExecuteAndWait(async () =>
{
while (true)
{
await client.Connect(token, TokenType.Bot);
break;
}
});
}
string token = /* der Token des Bots */;
ulong adminId = /* adminId */;
ulong serverId = /* serverId */;
ulong lobbyId = /* lobbyId */;
}
internal class CommandStore // Sammlung der Commands
{
public CommandStore(DiscordClient client, ulong serverId)
{
service = client.GetService<CommandService>();
server = client.GetServer(serverId); // Server anhand von Id selektieren - !! NullReferenceException !!
Help();
// Andere Commands ...
}
private CommandService service;
private Server server;
private void Help()
{
service.CreateCommand("help").Do(async (e) =>
{
await e.User.SendMessage("hilfetext");
});
}
}
internal class EventStore // Sammlung der Events
{
public EventStore(DiscordClient discordClient, ulong serverId, ulong idAdmin, ulong lobbyId)
{
client = discordClient;
lobby = client.GetServer(serverId).GetChannel(lobbyId); // Server -> LobbyChannel anhand von Id selektieren - !! NullReferenceException !!
UserJoined();
// Andere Events ...
}
private DiscordClient client;
private Channel lobby;
private void UserJoined() // Neuer User auf dem Server
{
client.UserJoined += async (s, e) =>
{
await lobby.SendMessage("irgendeine Nachricht");
};
}
}
|