Passed
Branch master (dc2491)
by Anas
03:44 queued 02:00
created

modules.roll.dice()   A

Complexity

Conditions 4

Size

Total Lines 9
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 9
nop 3
dl 0
loc 9
rs 9.95
c 0
b 0
f 0
1
#!/usr/bin/python
2
# -*- coding: utf-8 -*-
3
from telegram.ext import CommandHandler
4
from modules.logging import log_command
5
from random import randint, seed
6
from datetime import datetime
7
8
choices = ["It is certain", "It is decidedly so", "Without a doubt", "Yes definitely",
9
           "You may rely on it", "As I see it, yes", "Most likely", "Outlook good",
10
           "Yes", "Signs point to yes", "Reply hazy try again", "Ask again later",
11
           "Better not tell you now", "Cannot predict now", "Concentrate and ask again",
12
           "Don't count on it", "My reply is no", "My sources say no", "Outlook not so good",
13
           "Very doubtful"]
14
15
splitter_ru = " или "
16
splitter_en = " or "
17
splitters = [" or ", " или "]
18
19
20
def module_init(gd):
21
    commands = gd.config["commands"]
22
    for command in commands:
23
        gd.dp.add_handler(CommandHandler(command, roll, pass_args=True))
24
25
26
def mysteryball(update, string):
27
    seed() if string == "" else seed(string)
28
    answer = randint(0, len(choices)-1)
29
    update.message.reply_text("🎱 " + choices[answer])
30
31
32
def splitter_check(update, text):
33
    for splitter in splitters:
34
        if splitter in text:
35
            return splitter
36
37
38
def rolling_process(update, full_text, split_text):
39
    seed(full_text)
40
    randoms = len(split_text) - 1
41
    answer = randint(0, randoms)
42
    uncapitalized = split_text[answer]
43
    capitalized = uncapitalized[0].upper() + uncapitalized[1:]
44
    update.message.reply_text("⚖️ " + capitalized)
45
46
47
def numbers_check(update, text):
48
    try:
49
        rng_end = int(text)
50
        return 0, rng_end
51
    except ValueError:
52
        pass
53
    if "-" in text:
54
        numbers = text.split("-")
55
        try:
56
            rng_start = int(numbers[0])
57
            rng_end = int(numbers[1])
58
            return rng_start, rng_end
59
        except:
60
            return None, None
61
    else:
62
        return None, None
63
64
65
def dice(update, number1, number2):
66
    if number1 is not None and number2 is not None:
67
        if number1 > number2:
68
            tmp = number1
69
            number1 = number2
70
            number2 = tmp
71
        random_number = randint(number1, number2)
72
        update.message.reply_text("🎲 " + str(random_number))
73
        return True
74
75
76
def roll(bot, update, args):
77
    current_time = datetime.strftime(datetime.now(), "%d.%m.%Y %H:%M:%S")
78
    if update.message.reply_to_message is not None:
79
        args = update.message.reply_to_message.text.split(" ")
80
    full_text = ' '.join(args)
81
    rng_start, rng_end = numbers_check(update, full_text)
82
    if dice(update, rng_start, rng_end):
83
        return
84
    splitter = splitter_check(update, full_text)
85
    if splitter:
86
        split_text = full_text.split(splitter)
87
        rolling_process(update, full_text, split_text)
88
    else:
89
        mysteryball(update, full_text)
90
    print(current_time, ">", "/roll", ">", update.message.from_user.username)
91
    log_command(bot, update, current_time, "roll")
92