parent
49f34a8fab
commit
4e69ec332c
@ -0,0 +1,5 @@
|
|||||||
|
from .stealemoji import StealEmoji
|
||||||
|
|
||||||
|
|
||||||
|
def setup(bot):
|
||||||
|
bot.add_cog(StealEmoji(bot))
|
@ -0,0 +1,158 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
import urllib
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
from typing import List, Union
|
||||||
|
|
||||||
|
import discord
|
||||||
|
from discord.ext import commands
|
||||||
|
|
||||||
|
from redbot.core import Config
|
||||||
|
from redbot.core.bot import Red
|
||||||
|
|
||||||
|
|
||||||
|
class StealEmoji:
|
||||||
|
"""
|
||||||
|
This cog steals emojis and creates servers for them
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, red: Red):
|
||||||
|
self.bot = red
|
||||||
|
self.config = Config.get_conf(self, identifier=11511610197108101109111106105)
|
||||||
|
default_global = {
|
||||||
|
"stolemoji": {},
|
||||||
|
"guildbanks": [],
|
||||||
|
"on": False
|
||||||
|
}
|
||||||
|
|
||||||
|
default_stolemoji = {
|
||||||
|
"guildbank": None,
|
||||||
|
"name": None,
|
||||||
|
"require_colons": False,
|
||||||
|
"managed": False,
|
||||||
|
"guild_id": None,
|
||||||
|
"created_at": None,
|
||||||
|
"url": None,
|
||||||
|
"roles": [],
|
||||||
|
"guild": None # Will not save this one
|
||||||
|
}
|
||||||
|
|
||||||
|
self.config.register_global(**default_global)
|
||||||
|
|
||||||
|
@commands.group()
|
||||||
|
async def stealemoji(self, ctx: commands.Context):
|
||||||
|
"""
|
||||||
|
Base command for this cog. Check help for the commands list.
|
||||||
|
"""
|
||||||
|
if ctx.invoked_subcommand is None:
|
||||||
|
await ctx.send_help()
|
||||||
|
|
||||||
|
@stealemoji.command(name="collect")
|
||||||
|
async def se_collect(self, ctx):
|
||||||
|
"""Toggles whether emoji's are collected or not"""
|
||||||
|
currSetting = await self.config.on()
|
||||||
|
await self.config.on.set(not currSetting)
|
||||||
|
await ctx.send("Collection is now "+str(not currSetting))
|
||||||
|
|
||||||
|
async def on_reaction_add(self, reaction: discord.Reaction, user: discord.User):
|
||||||
|
"""Event handler for reaction watching"""
|
||||||
|
if not reaction.custom_emoji():
|
||||||
|
return
|
||||||
|
|
||||||
|
if not (await self.config.on()):
|
||||||
|
return
|
||||||
|
|
||||||
|
emoji = reaction.emoji
|
||||||
|
if emoji in self.bot.emojis:
|
||||||
|
return
|
||||||
|
|
||||||
|
# This is now a custom emoji that the bot doesn't have access to, time to steal it
|
||||||
|
# First, do I have an available guildbank?
|
||||||
|
|
||||||
|
|
||||||
|
guildbank = None
|
||||||
|
banklist = await self.config.guildbanks()
|
||||||
|
for guild in banklist:
|
||||||
|
if len(guild.emojis)<50:
|
||||||
|
guildbank = guild
|
||||||
|
break
|
||||||
|
|
||||||
|
if not guildbank:
|
||||||
|
# Eventually make a new banklist
|
||||||
|
return
|
||||||
|
|
||||||
|
# Next, have I saved this emoji before (in self.bot.emojis should've done this)
|
||||||
|
|
||||||
|
stolemojis = await self.config.stolemoji()
|
||||||
|
|
||||||
|
if emoji.id in stolemojis:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Alright, time to steal it for real
|
||||||
|
path = urlparse(emoji.url).path
|
||||||
|
ext = os.path.splitext(path)[1]
|
||||||
|
urllib.urlretrieve(emoji.url, emoji.name+ext)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await guildbank.create_custom_emoji(name=emoji.name,image=emoji.url,reason="Stole from "+str(user))
|
||||||
|
except Forbidden as e:
|
||||||
|
raise PermissionError("No permission to add emojis") from e
|
||||||
|
except HTTPException:
|
||||||
|
pass # Unhandled error
|
||||||
|
|
||||||
|
# If you get this far, YOU DID IT
|
||||||
|
|
||||||
|
owner = await self.bot.application_info()
|
||||||
|
owner = owner.owner
|
||||||
|
await owner.send("Just added emoji "+str(emoji)+" to server "+str(guildbank))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# async def
|
||||||
|
|
||||||
|
|
||||||
|
# async def on_raw_reaction_add(self, emoji: discord.PartialReactionEmoji,
|
||||||
|
# message_id: int, channel_id: int, user_id: int):
|
||||||
|
# """
|
||||||
|
# Event handler for long term reaction watching.
|
||||||
|
|
||||||
|
# :param discord.PartialReactionEmoji emoji:
|
||||||
|
# :param int message_id:
|
||||||
|
# :param int channel_id:
|
||||||
|
# :param int user_id:
|
||||||
|
# :return:
|
||||||
|
# """
|
||||||
|
# if emoji.is_custom_emoji():
|
||||||
|
# emoji_id = emoji.id
|
||||||
|
# else:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# has_reactrestrict, combos = await self.has_reactrestrict_combo(message_id)
|
||||||
|
|
||||||
|
# if not has_reactrestrict:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# member = self._get_member(channel_id, user_id)
|
||||||
|
# except LookupError:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# if member.bot:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# try:
|
||||||
|
# roles = [self._get_role(member.guild, c.role_id) for c in combos]
|
||||||
|
# except LookupError:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# for apprrole in roles:
|
||||||
|
# if apprrole in member.roles:
|
||||||
|
# return
|
||||||
|
|
||||||
|
# message = await self._get_message_from_channel(channel_id, message_id)
|
||||||
|
# await message.remove_reaction(emoji, member)
|
||||||
|
|
Loading…
Reference in new issue