Compare commits
50 Commits
7d987643d7
...
main
Author | SHA1 | Date | |
---|---|---|---|
8eaed5595c | |||
973c4980f8 | |||
87d7cc5933 | |||
ac30629979 | |||
3c3815defb | |||
06d44e564f | |||
caaf419d6d | |||
d548e00fb3 | |||
0832d25a26 | |||
89dcaf46ea | |||
9ec7f92a4c | |||
b3e84736dc | |||
54bc64e337 | |||
6772fa2711 | |||
b7c10342bb | |||
ded4ddb09a | |||
4492dae059 | |||
8245932e33 | |||
ebac399c68 | |||
2490688bb0 | |||
b243e8d4f0 | |||
ef57832480 | |||
c87a54932a | |||
702f0ca119 | |||
29bca2cafc | |||
f188c90284 | |||
ccc19b384e | |||
5e98f7353b | |||
6e492fc296 | |||
0c94e60258 | |||
cc0c60a82b | |||
66e6c3f688 | |||
d61f9543fb | |||
a9a313aa02 | |||
56f54bed6a | |||
8014f90e2c | |||
c6fc4cdf0e | |||
dc32fb3dcc | |||
97e2108968 | |||
0ffc771d09 | |||
dceabb23c3 | |||
2ebe97ebcd | |||
55ebc9856c | |||
3b2586bac1 | |||
339f42234a | |||
ed0f5d33e7 | |||
6b586596ae | |||
ae4b1ea6d5 | |||
e32b6f5a00 | |||
1d134bd50a |
180
coin.rb
180
coin.rb
@ -2,9 +2,26 @@ require 'dotenv/load'
|
|||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'discordrb'
|
require 'discordrb'
|
||||||
|
|
||||||
|
|
||||||
|
MAX_COINS_PER_DAY = 999
|
||||||
COIN_TIMEOUT = 15
|
COIN_TIMEOUT = 15
|
||||||
SCOREBOARD = './scoreboard.yml'
|
SCOREBOARD = './scoreboard.yml'
|
||||||
coin_state_active = false
|
PASTA='You know what? Im done, i am leaving, we were friendly talking about the subject. This crossed the line of "ok killer of joy" to "no fun allowed"'
|
||||||
|
COIN_EMOJI = '🪙'
|
||||||
|
BAG_EMOJI = '💰'
|
||||||
|
|
||||||
|
COIN_STATE_IDLE = 0
|
||||||
|
COIN_STATE_ACTIVE = 1
|
||||||
|
COIN_STATE_MATH = 2
|
||||||
|
|
||||||
|
MATH_PROBLEM_COIN_GAIN = 3
|
||||||
|
|
||||||
|
$coin_state_active = COIN_STATE_IDLE
|
||||||
|
$coins_offered_today = 0
|
||||||
|
|
||||||
|
$mathproblem_op1 = 0
|
||||||
|
$mathproblem_op2 = 0
|
||||||
|
$mathproblem_operator = "+"
|
||||||
|
|
||||||
bot = Discordrb::Bot.new token: ENV['DISCORD_TOKEN']
|
bot = Discordrb::Bot.new token: ENV['DISCORD_TOKEN']
|
||||||
|
|
||||||
@ -13,63 +30,180 @@ def get_seconds_to_midnight(time)
|
|||||||
return t2 - time
|
return t2 - time
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_random_duration(time)
|
def get_random_hours(min, max)
|
||||||
max = get_seconds_to_midnight(time)
|
min_hours = min * 60 * 60
|
||||||
return rand(0..max)
|
max_hours = max * 60* 60
|
||||||
|
return rand(min_hours..max_hours)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_scoreboard()
|
def load_scoreboard()
|
||||||
YAML::load_file(SCOREBOARD) || {}
|
YAML::load_file(SCOREBOARD) || {}
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_coin_count(scoreboard, user)
|
def get_coin_count(user)
|
||||||
|
scoreboard = load_scoreboard()
|
||||||
scoreboard[user] || 0
|
scoreboard[user] || 0
|
||||||
end
|
end
|
||||||
|
|
||||||
def increment_coin(scoreboard, user)
|
def increment_coin(user, amount=1)
|
||||||
coins = get_coin_count(scoreboard, user) + 1
|
scoreboard = load_scoreboard()
|
||||||
|
coins = get_coin_count(user) + amount
|
||||||
scoreboard[user] = coins
|
scoreboard[user] = coins
|
||||||
|
|
||||||
File.write(SCOREBOARD, scoreboard.to_yaml)
|
File.write(SCOREBOARD, scoreboard.to_yaml)
|
||||||
|
|
||||||
|
return coins
|
||||||
|
end
|
||||||
|
|
||||||
|
def empty_coin(user)
|
||||||
|
scoreboard = load_scoreboard()
|
||||||
|
scoreboard[user] = 0
|
||||||
|
|
||||||
|
File.write(SCOREBOARD, scoreboard.to_yaml)
|
||||||
end
|
end
|
||||||
|
|
||||||
def plural(string, count)
|
def plural(string, count)
|
||||||
"#{count} #{string}#{count > 1 ? 's' : ''}"
|
"#{count} #{string}#{count != 1 ? 's' : ''}"
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.message(with_text: 'GET COIN' ) do |event|
|
def clean_name(input)
|
||||||
|
input.tr '@', ''
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_coin(event, amt = 1)
|
||||||
# update score
|
# update score
|
||||||
if coin_state_active
|
author = event.methods.include?(:author) ? event.author : event.user
|
||||||
scoreboard = load_scoreboard()
|
|
||||||
increment_coin(scoreboard, event.author.id)
|
|
||||||
|
|
||||||
coin_state_active = false
|
if $coin_state_active != 0
|
||||||
|
if author.bot_account?
|
||||||
coins = get_coin_count(scoreboard, event.author.id)
|
event.respond "Bots don't get coins!"
|
||||||
event.respond "Nice catch, #{event.author.name}! You have #{plural('coin', coins)} now!"
|
end
|
||||||
|
$coin_state_active = COIN_STATE_IDLE
|
||||||
|
if(rand(100) == 47)
|
||||||
|
hyper_coin_amount = rand(100)
|
||||||
|
coins = increment_coin(event.author.id, hyper_coin_amount)
|
||||||
|
event.respond "What astounding luck!!! #{clean_name author.display_name}, you've just activated HYPER COIN EVENT and have received #{hyper_coin_amount} coins for a grand total of #{coins} coins!"
|
||||||
else
|
else
|
||||||
event.respond "No coins for you, #{event.author.name}!"
|
coins = increment_coin(author.id, amt)
|
||||||
|
event.respond "Nice catch, #{clean_name author.display_name}! You have #{plural('coin', coins)} now!"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
event.respond "No coins for you, #{clean_name author.display_name}!"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def give_coin(event)
|
||||||
|
reactor_coins = get_coin_count(event.user.id)
|
||||||
|
if reactor_coins <= 0
|
||||||
|
event.respond("Nice gesture, <@#{event.user.id}>, but you're broke! To get more coins, type the words `GET COIN` whenever I post the coin event message! But be quick, your friends are trying their best to get it before you do!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if event.message.author == event.user
|
||||||
|
event.respond("<@#{event.user.id}>, you can't give coins to yourself!")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
coin_amount = 0
|
||||||
|
if event.emoji.name == COIN_EMOJI
|
||||||
|
coin_amount = 1
|
||||||
|
elsif event.emoji.name == BAG_EMOJI
|
||||||
|
coin_amount = 5
|
||||||
|
end
|
||||||
|
|
||||||
|
if reactor_coins < coin_amount
|
||||||
|
coin_amount = reactor_coins
|
||||||
|
end
|
||||||
|
|
||||||
|
increment_coin(event.message.author.id, coin_amount)
|
||||||
|
increment_coin(event.user.id, -coin_amount)
|
||||||
|
|
||||||
|
event.respond "How nice! <@#{event.message.author.id}> has received #{plural('coin', coin_amount)} from <@#{event.user.id}>!"
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.message(in: Integer(ENV['BOT_CHANNEL'])) do |event|
|
||||||
|
if event.message.attachments.count { |x| x.filename.scan(/coin*/).length > 0 } > 0
|
||||||
|
event.respond "Oh no! Looks like you tried to post a fradulent coin! #{clean_name event.author.display_name}, your coin balance has now been emptied. Let that be a lesson for next time!"
|
||||||
|
empty_coin(event.author.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.message(content: 'GET COIN' ) do |event|
|
||||||
|
get_coin(event)
|
||||||
|
end
|
||||||
|
|
||||||
bot.message(with_text: '/coins') do |event|
|
bot.message(with_text: '/coins') do |event|
|
||||||
coins = get_coin_count(load_scoreboard(), event.author.id)
|
coins = get_coin_count(event.author.id)
|
||||||
event.respond "#{event.author.name}, you have #{plural('coin', coins)}!"
|
event.respond "#{clean_name event.author.display_name}, you have #{plural('coin', coins)}!"
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.message(with_text: '!leave') do |event|
|
||||||
|
event.respond PASTA
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.message(with_text: 'boobs', in: Integer(ENV['CUM_CHANNEL'])) do |event|
|
||||||
|
next if not ENV['CUM_CHANNEL']
|
||||||
|
event.respond "# OHHHHHH IM GONNA CUM"
|
||||||
|
end
|
||||||
|
|
||||||
|
bot.reaction_add do |event|
|
||||||
|
next unless [COIN_EMOJI, BAG_EMOJI].include? event.emoji.name
|
||||||
|
|
||||||
|
if event.message.author.id == bot.bot_application.id
|
||||||
|
get_coin(event)
|
||||||
|
else
|
||||||
|
give_coin(event)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
# math problem
|
||||||
|
bot.message(in: Integer(ENV['BOT_CHANNEL'])) do |event|
|
||||||
|
next unless $coin_state_active == COIN_STATE_MATH
|
||||||
|
|
||||||
|
result = eval("$mathproblem_op1 #{$mathproblem_operator} $mathproblem_op2")
|
||||||
|
user_result = Integer(event.message.content) rescue false
|
||||||
|
|
||||||
|
if result == user_result
|
||||||
|
get_coin(event, MATH_PROBLEM_COIN_GAIN)
|
||||||
|
elsif user_result.is_a? Integer
|
||||||
|
event.respond "Nice try, but you're wrong!"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.run(true)
|
bot.run(true)
|
||||||
|
|
||||||
loop do
|
loop do
|
||||||
# sleep until random time from now to midnight
|
# sleep random amount of time between 1 and 4 hours
|
||||||
# sleep(get_random_duration(Time.now))
|
sleep(get_random_hours(1, 4))
|
||||||
|
if rand(6) == 1
|
||||||
|
# math problem
|
||||||
|
|
||||||
# activate coin state
|
# activate coin state
|
||||||
coin_state_active = true
|
$coin_state_active = COIN_STATE_MATH
|
||||||
|
|
||||||
|
$mathproblem_op1 = rand(10..150)
|
||||||
|
$mathproblem_op2 = rand(10..150)
|
||||||
|
$mathproblem_operator = rand(2) == 1 ? "+" : "-"
|
||||||
|
|
||||||
|
# send the math problem
|
||||||
|
bot.send_file(ENV['BOT_CHANNEL'], File.open('./block.gif', 'r'))
|
||||||
|
bot.send_message(ENV['BOT_CHANNEL'], "Solve the following for #{MATH_PROBLEM_COIN_GAIN} coins: `#{$mathproblem_op1} #{$mathproblem_operator} #{$mathproblem_op2}`")
|
||||||
|
else
|
||||||
|
# activate coin state
|
||||||
|
$coin_state_active = COIN_STATE_ACTIVE
|
||||||
# send coin GIF
|
# send coin GIF
|
||||||
bot.send_file(ENV['BOT_CHANNEL'], File.open('./coin.gif', 'r'))
|
bot.send_file(ENV['BOT_CHANNEL'], File.open('./coin.gif', 'r'))
|
||||||
|
end
|
||||||
|
|
||||||
# sleep until midnight to reset cycle
|
$coins_offered_today += 1
|
||||||
|
# if max coins per day has reached, sleep until midnight
|
||||||
|
if $coins_offered_today >= MAX_COINS_PER_DAY
|
||||||
sleep(get_seconds_to_midnight(Time.now))
|
sleep(get_seconds_to_midnight(Time.now))
|
||||||
|
sleep(get_random_hours(5, 11))
|
||||||
|
$coins_offered_today = 0
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
bot.join()
|
bot.join()
|
||||||
|
Loading…
Reference in New Issue
Block a user