-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
112 lines (93 loc) · 3.65 KB
/
app.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
import discord, asyncio
import secret
from queue import Queue
from discord.ext.commands import Bot
client = Bot(command_prefix='!', description='Kick users from voice chat in a stylish fashion')
q = Queue()
async def executeKick():
await client.wait_until_ready()
while not client.is_closed:
await asyncio.sleep(1)
if q.empty():
continue
try:
data = q.get()
members = data[0]
message_channel = data[1]
created = False
voice_members = []
for member in members:
if not member.voice.voice_channel:
await client.send_message(message_channel, member.name + " isn't in a voice channel")
continue
if not created:
channel = await client.create_channel(member.server, "kicked", type=discord.ChannelType.voice)
voice = await client.join_voice_channel(channel)
player = voice.create_ffmpeg_player('sound.mp3')
created = True
voice_members.append(member)
await client.move_member(member, channel)
if created:
player.start()
count = 0
length = 3
while count < length:
await asyncio.sleep(1)
count += 1
player.stop()
await voice.disconnect()
await client.delete_channel(channel)
await client.send_message(message_channel, "Kicked " + ', '.join(member.name for member in voice_members))
except discord.Forbidden:
print("Bot does not have required permissions")
return
except discord.NotFound:
print("Channel not found")
return
except discord.HTTPException:
print("Channel operations failed")
return
@client.command(name='kick', pass_context=True)
async def kick(ctx):
if ctx.message.server:
if(len(ctx.message.mentions) == 0):
await client.say("You didn't specify any users")
return
q.put((ctx.message.mentions, ctx.message.channel))
@client.command(name='kickchannel', aliases=['kickc'], pass_context=True)
async def kick_channel(ctx, arg):
channel = discord.utils.get(ctx.message.server.channels, name=arg, type=discord.ChannelType.voice)
print(channel.voice_members)
if not channel:
await client.say("Could not find a channel with the name " + arg)
return
if not channel.voice_members:
await client.say(arg + " is empty")
return
q.put((channel.voice_members, ctx.message.channel))
@client.command(name='kickall', aliases=['kicka'], pass_context=True)
async def kick_all(ctx):
all_members = []
for channel in ctx.message.server.channels:
for member in channel.voice_members:
all_members.append(member)
if not all_members:
await client.say("Nobody is in voice chat.")
return
q.put((all_members, ctx.message.channel))
@client.event
async def on_command_error(error, ctx):
if isinstance(error, discord.ext.commands.errors.MissingRequiredArgument):
await client.send_message(ctx.message.channel, "You didn't specify a channel")
return
else:
return
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
await client.change_presence(game=discord.Game(name="The Kicking Game"))
client.loop.create_task(executeKick())
client.run(secret.TOKEN)