自動メッセージを設定しようとしています。DiscordSocketClientとDiscord Channel Idが接続され、準備ができているとすれば、そのチャネルにどのようにメッセージを送信しますか?
私が設定しています私のclient
私が使用します。
public class Scheduler
{
private readonly DiscordSocketClient _client;
private static Timer _timer;
public void Start(object state = null)
{
Sender.Send(_client);
_timer = new Timer(Start, null, (int)Duration.FromMinutes(1).TotalMilliseconds, 0);
}
public Scheduler(DiscordSocketClient client)
{
_client = client;
}
}
た場合:次のようになります
private Task OnClientReady()
{
var scheduler = new Scheduler(client);
scheduler.Start();
return Task.CompletedTask;
}
:
client.Ready += OnClientReady;
そこから私は私のScheduler
クラスを開始しますタイマーダンプを呼び出すと、client
が私SocketGuildChannel
を与える
var channel = client.Guilds
.SelectMany(g => g.Channels)
.SingleOrDefault(c => c.Id == rotation.ChannelId);
:私は、このようなSocketChannel
ともを与える
var channel = client.GetChannel((ulong) rotation.ChannelId);
:私はこのようなチャネルを取得しようとしている
public static class Sender
{
public static void Send(DiscordSocketClient client)
{
var currentLocalDateTime = SystemClock.Instance.InTzdbSystemDefaultZone().GetCurrentLocalDateTime();
var elapsedRotations = new List<Rotations>();
using (var db = new GOPContext())
{
elapsedRotations = db.Rotations
.Include(r => r.RotationUsers)
.Where(r => r.LastNotification == null ||
Period.Between(r.LastNotification.Value.ToLocalDateTime(),
currentLocalDateTime).Hours >= 23)
.ToList();
}
foreach (var rotation in elapsedRotations)
{
var zone = DateTimeZoneProviders.Tzdb.GetZoneOrNull(rotation.Timezone);
var zonedDateTime = SystemClock.Instance.InZone(zone).GetCurrentZonedDateTime();
if (zonedDateTime.Hour != 17)
continue;
//I need to send a message to the channel here.
//I have access to the connected/ready client,
//and the channel Id which is "rotation.ChannelId"
}
}
}
:以下Sender
クラス。これらのどちらも、チャンネルに直接メッセージを送信するオプションはありません。私はこれを行う方法を研究しようとしましたが、何も見つかりませんでした...ドキュメントはこれの例を持っていないようです...
これは簡単なことですが、私は私の知恵はそれで終わる。誰もこれを行う方法を知っていますか?
を取得しているが、ヘッドのためにあなたをありがとう唱え取得したいです!私は不満の音声チャンネルを使用したことはないので、私の心を越えたことはありません。与えられた 'SocketGuild'からTextChannelsのリストを取得することもできます。 – Primalpat