|
1
|
|
|
import os |
|
2
|
|
|
import requests |
|
3
|
|
|
import discord |
|
4
|
|
|
import asyncio |
|
5
|
|
|
import random |
|
6
|
|
|
import datetime |
|
7
|
|
|
import copy |
|
8
|
|
|
from discord.ext import commands |
|
9
|
|
|
|
|
10
|
|
|
|
|
11
|
|
|
class events(commands.Cog): |
|
12
|
|
|
def __init__(self, bot): |
|
13
|
|
|
self.bot = bot |
|
14
|
|
|
|
|
15
|
|
|
@commands.Cog.listener() |
|
16
|
|
|
async def on_ready(self): |
|
17
|
|
|
print(f"Beep boop {self.bot.user.name} has connected to Discord!\n") |
|
18
|
|
|
await self.bot.change_presence( |
|
19
|
|
|
status=discord.Status.online, |
|
20
|
|
|
activity=discord.Activity( |
|
21
|
|
|
type=discord.ActivityType.watching, name="for commands starting with !!, isa! or i!", |
|
22
|
|
|
), |
|
23
|
|
|
) |
|
24
|
|
|
|
|
25
|
|
|
# No nonsense self role but requires a on emoji remove function |
|
26
|
|
|
# @commands.Cog.listener() |
|
27
|
|
|
# async def on_raw_reaction_add(self, payload): |
|
28
|
|
|
# message_id = payload.message_id |
|
29
|
|
|
# if message_id == 733615890293194752: |
|
30
|
|
|
# guild_id = payload.guild_id |
|
31
|
|
|
# guild = discord.utils.find(lambda g: g.id == guild_id, self.bot.guilds) |
|
32
|
|
|
|
|
33
|
|
|
# if payload.emoji.name == "πββοΈ": |
|
34
|
|
|
# role = discord.utils.get(guild.roles, name="He/Him") |
|
35
|
|
|
# if payload.emoji.name == "πββοΈ": |
|
36
|
|
|
# role = discord.utils.get(guild.roles, name="She/Her") |
|
37
|
|
|
# if payload.emoji.name == "π": |
|
38
|
|
|
# role = discord.utils.get(guild.roles, name="Them/They") |
|
39
|
|
|
|
|
40
|
|
|
# if role is not None: |
|
41
|
|
|
# member = discord.utils.find(lambda m: m.id == payload.user_id, guild.members) |
|
42
|
|
|
# if member is not None: |
|
43
|
|
|
# await member.add_roles(role) |
|
44
|
|
|
# else: |
|
45
|
|
|
# print("member not found") |
|
46
|
|
|
|
|
47
|
|
|
# NOTE: all the messages and their IDs are hard coded as of now and probably will be since this bot is only for one server. |
|
48
|
|
|
# IDEA: I can go ahead and store everything in a database or a JSON file but seems unnecessary as it'll be only extra steps. |
|
49
|
|
|
# IDEA: If in future it turns out to be useful function, a bot command can be made which asks for a message and emoji and their roles and posts it |
|
50
|
|
|
# while storing all IDs in JSON and reading from there. |
|
51
|
|
|
|
|
52
|
|
|
@commands.Cog.listener() |
|
53
|
|
|
async def on_raw_reaction_add(self, payload): |
|
54
|
|
|
message_id = payload.message_id |
|
55
|
|
|
if message_id == 734044027858452502: # ID of the role message |
|
56
|
|
|
guild_id = payload.guild_id |
|
57
|
|
|
guild = discord.utils.find(lambda g: g.id == guild_id, self.bot.guilds) |
|
|
|
|
|
|
58
|
|
|
|
|
59
|
|
|
roles = { |
|
60
|
|
|
"πββοΈ": "He/Him", |
|
61
|
|
|
"πββοΈ": "She/Her", |
|
62
|
|
|
"π": "They/Them", |
|
63
|
|
|
} |
|
64
|
|
|
|
|
65
|
|
|
if payload.emoji.name == "πββοΈ": |
|
66
|
|
|
role = discord.utils.get(guild.roles, name="He/Him") |
|
67
|
|
|
if payload.emoji.name == "πββοΈ": |
|
68
|
|
|
role = discord.utils.get(guild.roles, name="She/Her") |
|
69
|
|
|
if payload.emoji.name == "π": |
|
70
|
|
|
role = discord.utils.get(guild.roles, name="They/Them") |
|
71
|
|
|
|
|
72
|
|
|
if role is not None: |
|
|
|
|
|
|
73
|
|
|
member = discord.utils.find(lambda m: m.id == payload.user_id, guild.members) |
|
74
|
|
|
if member is not None: |
|
75
|
|
|
current_role = filter(lambda r: str(r) in list(roles.values()), payload.member.roles) |
|
|
|
|
|
|
76
|
|
|
current_role = list(current_role) |
|
77
|
|
|
await member.remove_roles(*current_role) |
|
78
|
|
|
await member.add_roles(role) |
|
79
|
|
|
pronoun_message = await self.bot.get_channel(699675695231533126).fetch_message( |
|
80
|
|
|
734044027858452502 |
|
81
|
|
|
) # ID of role message or channel |
|
82
|
|
|
await pronoun_message.remove_reaction(payload.emoji, payload.member) |
|
83
|
|
|
else: |
|
84
|
|
|
print("member not found") |
|
85
|
|
|
|
|
86
|
|
|
@commands.Cog.listener() |
|
87
|
|
|
async def on_raw_reaction_remove(self, payload): |
|
88
|
|
|
pass |
|
89
|
|
|
|
|
90
|
|
|
# @commands.Cog.listener() |
|
91
|
|
|
# async def on_member_join(self, member): |
|
92
|
|
|
# channel = discord.utils.get(member.guild.text_channels, name="welcomeπ₯") |
|
93
|
|
|
# des = ( |
|
94
|
|
|
# f"Welcome {member.mention} to Indian Students Association's " |
|
95
|
|
|
# f"official discord server!\n" |
|
96
|
|
|
# f"Don't forget to check {(discord.utils.get(member.guild.channels, name='rulesπ')).mention}" |
|
97
|
|
|
# f"and {(discord.utils.get(member.guild.channels, name='faq')).mention}" |
|
98
|
|
|
# ) |
|
99
|
|
|
# if channel: |
|
100
|
|
|
# embed = discord.Embed(description=des, color=random.choice(self.bot.color_list)) |
|
101
|
|
|
# embed.set_thumbnail(url=member.avatar_url) |
|
102
|
|
|
# embed.set_author(name=member.name, icon_url=member.avatar_url) |
|
103
|
|
|
# embed.set_footer(text=member.guild, icon_url=member.guild.icon_url) |
|
104
|
|
|
# embed.timestamp = datetime.datetime.utcnow() |
|
105
|
|
|
|
|
106
|
|
|
# await channel.send(embed=embed) |
|
107
|
|
|
|
|
108
|
|
|
|
|
109
|
|
|
def setup(bot): |
|
110
|
|
|
bot.add_cog(events(bot)) |
|
111
|
|
|
|