【问题标题】:How do I send random pictures from the array如何从数组中发送随机图片
【发布时间】:2023-03-10 00:00:01
【问题描述】:

我最近一直在研究我的不和谐机器人,我想创建一个命令,从给定数组发送 随机 照片。目前我有这个代码:

[Command("sendpic"), Summary("")]
    public async Task SendPic()
    {
        string[] RandomPic = { "https://images.unsplash.com/photo-1536746803623-cef87080bfc8?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1000&q=80",
            "https://s3.amazonaws.com/artallnight/static/files/2018/08/14154730/back-1024x532.jpg",
            "https://www.abc.net.au/news/image/9776766-3x2-700x467.jpg",
            "https://static1.squarespace.com/static/58d2d1d003596ef5151dd694/t/5911277b893fc011d4e8543d/1494296445782/stars2.jpg?format=1500w"
        };
            Random random = new Random();
            int randomNumber = random.Next(0, 3);
            EmbedBuilder d = new EmbedBuilder();
            d.WithColor(120, 40, 23);

        if (randomNumber == 1)
        {
            await Context.Channel.SendMessageAsync(RandomPic[1]);
        } else if (randomNumber == 2) {
            await Context.Channel.SendMessageAsync(RandomPic[2]);
        } else if (randomNumber == 3){
            await Context.Channel.SendMessageAsync(RandomPic[3]);
        } else {
            await Context.Channel.SendMessageAsync(RandomPic[0]);
        }
    }

但它似乎不起作用,因为每当我调用“sendpic”命令时它只发送一张图片。我如何使它从数组中发送给定的图片(每次通话时都发送一张?)

【问题讨论】:

  • 为什么要查看randomNumber的值?您可以简单地在数组中使用randomNumberContext.Channel.SendMessageAsync(RandomPic[randomNumber]);。我还建议在函数之外初始化随机对象。很有可能您总是会得到相同的图片,请参阅this。此外,您生成的数字介于 0 和 2 之间,因为 MaxValue 是独占
  • 顺便说一句,random.Next(0, 3) 永远不会返回 3。maxValue 是独占的,如果您希望得到 3,则需要编写 random.Next(0, 4)
  • 好吧,看来我已经解决了这个问题。它现在还给了其他图片。感谢您的帮助!

标签: c# asp.net asp.net-core discord


【解决方案1】:

问题是每次调用命令时都会创建Random 的新实例。这个类不应该那样使用。 您应该在SendPic() 方法的范围之外有一个静态变量,如下所示:

public class YourModule : ModuleBase<SocketCommandContext>
{
    private static readonly Random random = new Random();

    //Your commands here
}

那我就这样使用它:

    [Command("sendpic"), Summary("")]
    public async Task SendPic()
    {
        string[] RandomPic = 
        { 
            "https://images.unsplash.com/photo-1536746803623-cef87080bfc8?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1000&q=80",
            "https://s3.amazonaws.com/artallnight/static/files/2018/08/14154730/back-1024x532.jpg",
            "https://www.abc.net.au/news/image/9776766-3x2-700x467.jpg",
            "https://static1.squarespace.com/static/58d2d1d003596ef5151dd694/t/5911277b893fc011d4e8543d/1494296445782/stars2.jpg?format=1500w"
        };
            int randomNumber = random.Next(0, RandomPic.Length);
            EmbedBuilder d = new EmbedBuilder();
            d.WithColor(120, 40, 23);

            await Context.Channel.SendMessageAsync(RandomPic[randomNumber]);
    }

顺便说一句,您不需要逐个检查结果。它不会很好地升级(想象一下检查 1 到 1000 之间的数字)。 检查我如何将RandomPic.Length 设为randomNumber 的上限,删除if 语句并直接调用RandomPic[randomNumber](它检索randomNumber 位置的元素RandomPic 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多