Completed
Pull Request — master (#63)
by
unknown
28s
created

memberForName()   A

Complexity

Conditions 4

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
c 1
b 0
f 0
dl 0
loc 12
rs 9.2
1
# Copyright (c) 2017 CorpNewt
2
#
3
# This software is released under the MIT License.
4
# https://opensource.org/licenses/MIT
5
6
import discord
7
8
def name(member : discord.Member):
9
    # A helper function to return the member's display name
10
    nick = name = None
11
    try:
12
        nick = member.nick
13
    except AttributeError:
14
        pass
15
    try:
16
        name = member.name
17
    except AttributeError:
18
        pass
19
    if nick:
20
        return nick
21
    if name:
22
        return name
23
    return None
24
25
def memberForID(id, members):
26
    # Check members.
27
    for member in members:
28
        if member.id == id:
29
            return member
30
    return None
31
32
def memberForName(name, members):
33
    # Check members.
34
    for member in members:
35
        if member.display_name.lower() == name.lower():
36
            return member
37
38
    # No member yet - try ID
39
    memID = ''.join(list(filter(str.isdigit, name)))
40
    newMem = memberForID(memID, members)
41
    if newMem:
42
        return newMem
43
    return None
44
45
def roleForID(id, server):
46
    for role in server.roles:
47
        if role.id == id:
48
            return role
49
    return None
50
51
def roleForName(name, server):
52
    for role in server.roles:
53
        if role.name.lower() == name.lower():
54
            return role
55
    # No role yet - try ID
56
    roleID = ''.join(list(filter(str.isdigit, name)))
57
    newRole = roleForID(roleID, server)
58
    if newRole:
59
        return newRole
60
    return None
61
62
def serverNick(user, server):
63
    for member in server.members:
64
        if member.id == user.id:
65
            return name(member)
66
    return None
67
68
def checkNameForInt(name, server):
69
    theList = name.split()
70
    # We see if we have multiple parts split by a space
71
    if len(theList)<2:
72
        # Only one part - no int included (or not separated by space)
73
        # Check if member exists - and if not throw an error, if so, throw a diff error
74
        amember = memberForName(name, server)
75
        if amember:
76 View Code Duplication
            # We at least have a member
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
77
            return { "Member" : amember, "Int" : None }
78
        else:
79
            # Now we check if we got an ID instead
80
            # Get just the numbers
81
            memID = ''.join(list(filter(str.isdigit, name)))
82
            newMem = memberForID(memID, server)
83
            if newMem:
84
                # We FOUND it!
85
                return { "Member" : newMem, "Int" : None }
86
            else:
87
                # Nothing was right about this...
88
                return { "Member" : None, "Int" : None }
89
    try:
90
        # Let's cast the last item as an int and catch any exceptions
91
        theInt = int(theList[len(theList)-1])
92
        newMemberName = " ".join(theList[:-1])
93
        amember = memberForName(newMemberName, server)
94
        if amember:
95
            return { "Member" : amember, "Int" : theInt }
96
        else:
97
            # Now we check if we got an ID instead
98
            # Get just the numbers
99
            memID = ''.join(list(filter(str.isdigit, newMemberName)))
100
            newMem = memberForID(memID, server)
101
            if newMem:
102
                # We FOUND it!
103
                return { "Member" : newMem, "Int" : theInt }
104
            else:
105
                # Nothing was right about this...
106
                return { "Member" : None, "Int" : None }
107
    except ValueError:
108
        # Last section wasn't an int
109
        amember = memberForName(name, server)
110
        if amember:
111
            # Name was just a member - return
112
            return { "Member" : amember, "Int" : None }
113
        else:
114
            # Now we check if we got an ID instead
115
            # Get just the numbers
116
            memID = ''.join(list(filter(str.isdigit, name)))
117
            newMem = memberForID(memID, server)
118
            if newMem:
119
                # We FOUND it!
120
                return { "Member" : newMem, "Int" : None }
121
            else:
122
                # Nothing was right about this...
123
                return { "Member" : None, "Int" : None }
124
    # Should never get here
125
    return None
126
127
def checkRoleForInt(name, server):
128
    theList = name.split()
129
    # We see if we have multiple parts split by a space
130
    if len(theList)<2:
131
        # Only one part - no int included (or not separated by space)
132
        # Check if role exists - and if not throw an error, if so, throw a diff error
133
        amember = roleForName(name, server)
134
        if amember:
135 View Code Duplication
            # We at least have a member
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
136
            return { "Role" : amember, "Int" : None }
137
        else:
138
            # Now we check if we got an ID instead
139
            # Get just the numbers
140
            memID = ''.join(list(filter(str.isdigit, name)))
141
            newMem = roleForID(memID, server)
142
            if newMem:
143
                # We FOUND it!
144
                return { "Role" : newMem, "Int" : None }
145
            else:
146
                # Nothing was right about this...
147
                return { "Role" : None, "Int" : None }
148
    try:
149
        # Let's cast the last item as an int and catch any exceptions
150
        theInt = int(theList[len(theList)-1])
151
        newMemberName = " ".join(theList[:-1])
152
        amember = roleForName(newMemberName, server)
153
        if amember:
154
            return { "Role" : amember, "Int" : theInt }
155
        else:
156
            # Now we check if we got an ID instead
157
            # Get just the numbers
158
            memID = ''.join(list(filter(str.isdigit, newMemberName)))
159
            newMem = roleForID(memID, server)
160
            if newMem:
161
                # We FOUND it!
162
                return { "Role" : newMem, "Int" : theInt }
163
            else:
164
                # Nothing was right about this...
165
                return { "Role" : None, "Int" : None }
166
    except ValueError:
167
        # Last section wasn't an int
168
        amember = roleForName(name, server)
169
        if amember:
170
            # Name was just a role - return
171
            return { "Role" : amember, "Int" : None }
172
        else:
173
            # Now we check if we got an ID instead
174
            # Get just the numbers
175
            memID = ''.join(list(filter(str.isdigit, name)))
176
            newMem = roleForID(memID, server)
177
            if newMem:
178
                # We FOUND it!
179
                return { "Role" : newMem, "Int" : None }
180
            else:
181
                # Nothing was right about this...
182
                return { "Role" : None, "Int" : None }
183
    # Should never get here
184
    return None
185