制作基于票的抽奖机器人的最佳方法是啥[关闭]
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 之间进行通信的最佳方式是啥? [关闭]