現在、指定したゲームをプレイしているギルドメンバーの数を返すコマンドを作成しようとしています。Discord.NET同じゲームをプレイしているユーザー
例(!は私のプレフィックスです):!playing League of Legends。
伝説のリーグ、出力を再生する5人のメンバーがある場合:
There are 5 users currently playing League of Legends.
は、私は、次のように設定し、デバッグから、私はv.Game.toString()
が正しい文字列を返すことを拾うことができたが、いくつかの理由でif文がトリガされません。また、メンバーがゲームをプレイしていないときにスローされる例外をキャッチします(私はそれがヌルだと仮定しましたか?)、そのための回避策がありますか?これは、特定のゲームをプレイしているメンバーの数をカウントしないのはなぜですか?
[Command("playing")]
public async Task playingGame(params string[] s)
{
string gameName = "";
int count = 0;
for (int i = 0; i < s.Length; i++)
{
gameName += s[i] + " ";
}
await Context.Channel.SendMessageAsync("Looking for: " + gameName);
var u = Context.Guild.Users;
foreach (var v in u)
{
await Context.Channel.SendMessageAsync("v = " + v.ToString());
try
{
await Context.Channel.SendMessageAsync(v.Game.ToString());
if (v.Game.ToString().ToLower().Equals(gameName.ToLower()))
{
count++;
await Context.Channel.SendMessageAsync("Found match, count = " + count);
}
}
catch (Exception x)
{
await Context.Channel.SendMessageAsync("Exception throw caught");
}
}
if (count > 1) {
await Context.Channel.SendMessageAsync("There are " + count + " users currently playing " + gameName + ".");
}
else if (count == 1)
{
await Context.Channel.SendMessageAsync("There is " + count + " user currently playing " + gameName + ".");
}
else if (count == 0)
{
await Context.Channel.SendMessageAsync("No one is currently playing " + gameName + ".");
}
}
これは例外です:
System.ArgumentException: Argument cannot be blank
Parameter name: Content
at Discord.Preconditions.NotNullOrEmpty(String obj, String name, String msg)
at Discord.API.DiscordRestApiClient.<CreateMessageAsync>d__77.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
の画像(プリ画像)ステートメントは、(ユーザ名は、プライバシー上の理由でブロックされた)トリガする場合:
あなたは例外を共有することができます。
また、私はこのコードたくさん簡素化していますか? – aloisdg
@aloisdg例外メッセージと、if文がトリガされるべき場所のピクチャを追加しました。 –
文字列がnullであることはわかっています。ゲームをプレイしていないので、初期化されていません。私の主な関心事は、if文がトリガされていないということです。 –