-
Notifications
You must be signed in to change notification settings - Fork 8
/
guessemotegame.py
115 lines (96 loc) · 3.98 KB
/
guessemotegame.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
"""Commands: "!estart", "!rngestart"."""
import random
from bot.commands.abstract.command import Command
from bot.utilities.permission import Permission
from bot.utilities.startgame import start_game
from bot.utilities.tools import emote_list_to_string
from bot.utilities.tools import replace_vars
class GuessEmoteGame(Command):
"""Play the Guess The Emote Game.
On Emote is randomly chosen from the list and the users
have to guess which on it is. Give points to the winner.
!emotes returns the random emote-list while game is active.
"""
perm = Permission.User
def __init__(self, bot):
"""Initialize variables."""
self.responses = {}
self.active = False
self.emotes = []
self.emote = ""
self.emote_game_emotes = bot.config.config["EmoteGame"]
self.emote_game_points = bot.config.config["points"]["emote_game"]
def init_game(self, bot, msg):
"""Initialize GuessEmoteGame."""
emotelist = []
if "rng" in msg.lower():
"""Get all twitch- and BTTV-Emotes, assemble a list of random emotes."""
twitchemotes = bot.emotes.get_global_twitch_emotes()
bttvemotes = (
bot.emotes.get_channel_bttv_emotes()
+ bot.emotes.get_global_bttv_emotes()
)
n_total = 25
n_bttv = 10
i = 0
while i < (n_total - n_bttv):
rng_emote = random.choice(twitchemotes)
if rng_emote not in emotelist:
emotelist.append(rng_emote)
i += 1
i = 0
while i < n_bttv:
rng_emote = random.choice(bttvemotes)
if rng_emote not in emotelist:
emotelist.append(rng_emote)
i += 1
else:
"""Get emotes from config-file."""
emotelist = self.emote_game_emotes
"""Shuffle list and choose a winning emote."""
random.shuffle(emotelist)
self.emotes = emotelist
self.emote = random.choice(emotelist)
def match(self, bot, user, msg, tag_info):
"""Match if the game is active or gets started with !estart."""
return (
self.active
or start_game(bot, user, msg, "!estart")
or start_game(bot, user, msg, "!rngestart")
)
def run(self, bot, user, msg, tag_info):
"""Initalize the command on first run. Check for right emote for each new msg."""
self.responses = bot.config.responses["GuessEmoteGame"]
cmd = msg.strip()
if not self.active:
self.active = True
self.init_game(bot, msg)
print("Right emote: " + self.emote)
var = {"<MULTIEMOTES>": emote_list_to_string(self.emotes)}
bot.write(replace_vars(self.responses["start_msg"]["msg"], var))
else:
if cmd == "!estop" and bot.get_permission(user) not in [
Permission.User,
Permission.Subscriber,
]:
bot.write(self.responses["stop_msg"]["msg"])
self.close(bot)
return
if cmd == self.emote:
var = {
"<USER>": bot.twitch.display_name(user),
"<EMOTE>": self.emote,
"<PRONOUN0>": bot.config.pronoun(user)[0].capitalize(),
"<AMOUNT>": self.emote_game_points,
}
bot.write(replace_vars(self.responses["winner_msg"]["msg"], var))
bot.ranking.increment_points(user, self.emote_game_points, bot)
bot.game_running = False
self.active = False
elif cmd == "!emotes":
var = {"<MULTIEMOTES>": emote_list_to_string(self.emotes)}
bot.write(replace_vars(self.responses["emote_msg"]["msg"], var))
def close(self, bot):
"""Close emote game."""
self.active = False
bot.game_running = False