generated from kkrypt0nn/Python-Discord-Bot-Template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathteam.py
178 lines (162 loc) · 7.28 KB
/
team.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
""""
Samuro Bot
Автор: *fennr*
github: https://github.com/fennr/Samuro-HotsBot
Бот для сообществ по игре Heroes of the Storm
"""
import discord
from discord import Colour
from discord.ext import commands
from discord.utils import get
from psycopg2 import errorcodes, errors
import utils.library.embeds
from utils.classes import Const
from utils import library, check
UniqueViolation = errors.lookup(errorcodes.UNIQUE_VIOLATION)
class Teams(commands.Cog, name="Teams"):
"""
— Модуль работы с Командами/Кланами
"""
def __init__(self, bot):
self.bot = bot
@commands.group(name="team")
async def team(self, ctx):
if ctx.invoked_subcommand is None:
pass
@team.command(name="create")
@check.is_admin()
async def team_create(self, ctx, leader, team_name, color=Colour.random()):
'''
— Создает команду team_name
'''
con, cur = library.get.con_cur()
print(leader)
player = library.get.profile_by_id_or_btag(leader)
team_n = team_name.replace('_', ' ')
print(team_n)
if player is not None:
insert = Const.inserts.Team
cur.execute(insert, (team_n, player.id))
team_id = cur.fetchone()[0]
update = Const.updates.PlayerTeam
cur.execute(update, (team_id, player.id))
library.commit(con)
await ctx.send(f"Команда {team_n} создана")
print(color)
await ctx.guild.create_role(name=team_n, color=color, mentionable=True)
member = ctx.guild.get_member(player.id)
role = get(member.guild.roles, name=team_n)
await member.add_roles(role)
else:
print("Для использования команды добавьте Ваш профиль в базу")
@team.command(name="add")
async def team_add(self, ctx, user):
"""
— Добавить в команду игрока @user
"""
con, cur = library.get.con_cur()
user_id = library.get.author_id(ctx)
select = Const.selects.TeamLid
cur.execute(select, (user_id, ))
team = library.get.team(cur.fetchone())
if team is not None:
player = library.get.profile_by_id_or_btag(user)
if player.team is None:
updateP = Const.updates.PlayerTeam
print(team.id)
print(player.id)
cur.execute(updateP, (team.id, player.id, ))
updateT = Const.updates.TeamMembers
cur.execute(updateT, (team.members+1, team.id, ))
library.commit(con)
await ctx.send(f"Игрок <@{player.id}> добавлен в команду {team.name}\n"
f"Всего игроков в команде - {team.members+1}")
member = ctx.guild.get_member(player.id)
role = get(member.guild.roles, name=team.name)
await member.add_roles(role)
else:
await ctx.send("Игрок уже в команде. Возможно состоять только в одной команде")
else:
await ctx.send("У вас нет прав на добавление участников в команду")
@team.command(name="remove")
async def team_remove(self, ctx, user):
"""
— Удалить из команды @user
"""
con, cur = library.get.con_cur()
user_id = library.get.author_id(ctx)
select = Const.selects.TeamLid
cur.execute(select, (user_id, ))
team = library.get.team(cur.fetchone())
print(team)
if team is not None:
player = library.get.profile_by_id_or_btag(user)
print(player)
if player.team is not None:
if player.team == team.id:
if player.id != team.leader:
updateP = Const.updates.PlayerTeam
cur.execute(updateP, (None, player.id,))
updateT = Const.updates.TeamMembers
cur.execute(updateT, (team.members - 1, team.id,))
library.commit(con)
await ctx.send(f"Игрок {library.get.mention(player.id)} исключен из команды {team.name}\n"
f"Всего игроков в команде - {team.members - 1}")
member = ctx.guild.get_member(player.id)
role = get(member.guild.roles, name=team.name)
await member.remove_roles(role)
else:
await ctx.send(f"Невозможно исключить лидера команды.\n"
f"!team close для удаления команды")
else:
await ctx.send(f"Игрок состоит в другой команде")
else:
await ctx.send("Игрок не состоит в команде")
else:
await ctx.send("У вас нет прав на удаление участника из команды")
@team.command(name="info")
async def team_info(self, ctx, role: discord.Role):
"""
— Информация о команде по имени или ID
"""
con, cur = library.get.con_cur()
team_name = role.name
print(team_name)
select = Const.selects.TeamName
cur.execute(select, (team_name, ))
team = library.get.team(cur.fetchone())
if team is not None:
embed = utils.library.embeds.team(team)
await ctx.send(embed=embed)
@team.command(name="close")
async def team_close(self, ctx):
con, cur = library.get.con_cur()
player = library.get.profile_by_id_or_btag(library.get.author_id(ctx))
if player is not None:
print(player)
select = Const.selects.TeamLid
cur.execute(select, (player.id, ))
record = cur.fetchone()
if record is not None:
print(record)
delete = Const.deletes.TeamLid
cur.execute(delete, (player.id, ))
library.commit(con)
await ctx.send(f"Команда {record.name} была распущена")
role = discord.utils.get(ctx.message.guild.roles, name=record.name)
if role:
await role.delete()
else:
ctx.send("Вы не имеете полномочий на данную команду")
@team.error
@team_create.error
@team_remove.error
async def team_handler(self, ctx, error):
print("Попали в обработку ошибок team")
error = getattr(error, 'original', error) # получаем пользовательские ошибки
print(type(error))
print(error)
if isinstance(error, UniqueViolation):
await ctx.send("У вас уже создана команда или существует команда с таким названием")
def setup(bot):
bot.add_cog(Teams(bot))