制作基于票的抽奖机器人的最佳方法是啥[关闭]

Posted

技术标签:

【中文标题】制作基于票的抽奖机器人的最佳方法是啥[关闭]【英文标题】:what's the best way to make a ticket based raffle bot [closed]制作基于票的抽奖机器人的最佳方法是什么[关闭] 【发布时间】:2020-06-27 02:23:46 【问题描述】:

我正在开发一个新的机器人,但我不知道实现工单的最佳方式是什么。例如,我希望这个不和谐的机器人赠送奖品,但拥有更多门票的人有更大的获胜机会

例子:

吉米有 10 个

贾克斯有 12 个

狮子座有 22 个

我想让 Leo 成为最有可能获胜的人。

【问题讨论】:

【参考方案1】:

这是一个非常基本的实现:

const Client, Collection = require('discord.js')

const client = new Client()

// change this to whatever you want
const prefix = '!'
// a collection of how many tickets each user (stored by their id) has bought
const tickets = new Collection()
// an array of user ids who can draw the raffle
cont canDraw = []

client.on('message', message => 
  const author, channel, content = message
  // don't do anything if the message was from a bot
  // or the message doesn't start with the prefix
  if (author.bot || !content.startsWith(prefix)) return

  const args = content.substring(prefix.length).split(' ')
  const command = args.shift()

  switch (command) 
    case 'buy': 
      // if first argument isn't a number
      if (isNaN(args[0])) return message.reply('you must specify the number of tickets you want to buy!')

      const n = Number(args[0])

      // insert logic to buy the tickets with something

      // adds the number of tickets to the collection
      tickets.set(author.id, (tickets.get(author.id) || 0) + n)
      channel.send(`Purchased $n tickets.`)
      break
    

    case 'draw': 
      // only allow some users to draw the raffle
      if (!canDraw.includes(author.id)) return
      // exit if nobody has bought any tickets
      if (tickets.size === 0) return message.reply('nobody has bought any tickets!')

      // this basically sets the chance to win the raffle to
      // (number of tickets you bought) ÷ (total number of tickets)
      const arr = tickets.reduce((arr, count, user) => 
        for (let i = 0; i < count; i++) arr.push(user)
        return arr
      , [])
      const winner = arr[Math.floor(Math.random() * arr.length)]

      // reset number of tickets bought
      tickets.clear()
      // <@!id> mentions the user, using their nickname if they have one
      channel.send(`The winner is <@!$winner>!`)
    
  
)

client.login(yourBotToken)

我不知道这是否是“最好的方法”,但它确实有效。


以后提问的提示:

如果您专注于一件特定的事情(例如“我如何选择具有不同权重的随机项目”)而不是问“我如何实现 x '。 Stack Overflow 并不是让人们为您编写所有代码。

【讨论】:

我发现这个答案是矛盾的。我认为您基本上很好地解决了TS的软件相关问题。你还提到下次他应该更多地关注一个单一的问题,而不是“请为我做这个”,我完全同意你的看法。但是,没有动机这样做,因为您仍然回答了他的问题。这种情况在过去发生了很多,如果这种情况继续下去,将来很可能会继续发生。请注意,这绝不是对您的批评,只是我注意到发生了很多事情。 @Ludo21South 好点。以后看到这样的问题我会考虑的。

以上是关于制作基于票的抽奖机器人的最佳方法是啥[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在硬件上 C++ 和 Python 之间进行通信的最佳方式是啥? [关闭]

在同一台机器上的 .NET 应用程序之间复制对象的最佳方式是啥? [关闭]

使用 GUI 制作 COM 服务器的最佳实践是啥?

同一台机器上的两个程序相互通信的最佳方式是啥

防止机器人向您的博客发送垃圾邮件的最佳方法是啥?

在 AWS 上设置基于 docker 的集群的最佳方法是啥? [关闭]