def server(self, ctx):
text = "**Support Server**\n\nIf you're encountering a problem with Tuxedo, or just wanna drop by, use this Discord link to join the official Tuxedo server.\n\nLink => https://discord.gg/KEcme4H"
try:
await ctx.author.send(text)
await ctx.send(":mailbox_with_mail: Check your DMs.")
except discord.Forbidden:
await ctx.send(text)
python类gg()的实例源码
def clean_invite_embed(line):
"""Makes invites not embed"""
return line.replace("discord.gg/", "discord.gg/\u200b")
def __init__(self, bot):
self.bot = bot
self.invites = ['discord.gg/', 'discordapp.com/invite/']
self.invite_domains = ['discord.gg', 'discordapp.com']
def about(self, ctx):
"""Display information about the bot itself
This command was adapted from RoboDanny by Rapptz - https://www.github.com/Rapptz/RoboDanny
"""
manager = MessageManager(self.bot, ctx.author, ctx.channel, ctx.prefix, [ctx.message])
e = discord.Embed(title='Spirit v{}'.format(constants.VERSION), colour=constants.BLUE)
e.description = ("[Invite Spirit](https://discordapp.com/oauth2/authorize?client_id=335084645743984641&scope=bot&permissions=523344)\n"
+ "[Spirit Support Server](https://discord.gg/GXCFpkr)")
owner = self.bot.get_user(118926942404608003)
e.set_author(name=str(owner), icon_url=owner.avatar_url)
# statistics
total_members = sum(1 for _ in self.bot.get_all_members())
total_online = len({m.id for m in self.bot.get_all_members() if m.status is discord.Status.online})
total_unique = len(self.bot.users)
voice_channels = []
text_channels = []
for guild in self.bot.guilds:
voice_channels.extend(guild.voice_channels)
text_channels.extend(guild.text_channels)
text = len(text_channels)
voice = len(voice_channels)
e.add_field(name='Members', value='{} total\n{} unique\n{} unique online'.format(total_members, total_unique, total_online))
e.add_field(name='Channels', value='{} total\n{} text\n{} voice'.format(text + voice, text, voice))
memory_usage = "%0.2f" % (self.process.memory_full_info().uss / 1024**2)
cpu_usage = "%0.2f" % (self.process.cpu_percent() / psutil.cpu_count())
e.add_field(name='Process', value='{} MiB\n{}% CPU'.format(memory_usage, cpu_usage))
e.add_field(name='Guilds', value=len(self.bot.guilds))
e.add_field(name='Commands Run', value=self.bot.command_count)
e.add_field(name='Uptime', value=self.get_bot_uptime(brief=True))
e.set_footer(text='Made with discord.py', icon_url='http://i.imgur.com/5BFecvA.png')
await manager.say(e, embed=True, delete=False)
await manager.clear()
def about(self, ctx):
"""Tells you information about the bot itself."""
cmd = r'git show -s HEAD~3..HEAD --format="[{}](https://github.com/Rapptz/RoboDanny/commit/%H) %s (%cr)"'
if os.name == 'posix':
cmd = cmd.format(r'\`%h\`')
else:
cmd = cmd.format(r'`%h`')
revision = os.popen(cmd).read().strip()
embed = discord.Embed(description='Latest Changes:\n' + revision)
embed.title = 'Official Bot Server Invite'
embed.url = 'https://discord.gg/0118rJdtd1rVJJfuI'
embed.colour = discord.Colour.blurple()
owner = self.bot.get_user(self.bot.owner_id)
embed.set_author(name=str(owner), icon_url=owner.avatar_url)
# statistics
total_members = sum(1 for _ in self.bot.get_all_members())
total_online = len({m.id for m in self.bot.get_all_members() if m.status is discord.Status.online})
total_unique = len(self.bot.users)
voice_channels = []
text_channels = []
for guild in self.bot.guilds:
voice_channels.extend(guild.voice_channels)
text_channels.extend(guild.text_channels)
text = len(text_channels)
voice = len(voice_channels)
embed.add_field(name='Members', value=f'{total_members} total\n{total_unique} unique\n{total_online} unique online')
embed.add_field(name='Channels', value=f'{text + voice} total\n{text} text\n{voice} voice')
memory_usage = self.process.memory_full_info().uss / 1024**2
cpu_usage = self.process.cpu_percent() / psutil.cpu_count()
embed.add_field(name='Process', value=f'{memory_usage:.2f} MiB\n{cpu_usage:.2f}% CPU')
embed.add_field(name='Guilds', value=len(self.bot.guilds))
embed.add_field(name='Commands Run', value=sum(self.bot.command_stats.values()))
embed.add_field(name='Uptime', value=self.get_bot_uptime(brief=True))
embed.set_footer(text='Made with discord.py', icon_url='http://i.imgur.com/5BFecvA.png')
await ctx.send(embed=embed)
def info(self):
"""Shows info about Red"""
author_repo = "https://github.com/Twentysix26"
red_repo = author_repo + "/Red-DiscordBot"
server_url = "https://discord.gg/red"
dpy_repo = "https://github.com/Rapptz/discord.py"
python_url = "https://www.python.org/"
since = datetime.datetime(2016, 1, 2, 0, 0)
days_since = (datetime.datetime.utcnow() - since).days
dpy_version = "[{}]({})".format(discord.__version__, dpy_repo)
py_version = "[{}.{}.{}]({})".format(*os.sys.version_info[:3],
python_url)
owner_set = self.bot.settings.owner is not None
owner = self.bot.settings.owner if owner_set else None
if owner:
owner = discord.utils.get(self.bot.get_all_members(), id=owner)
if not owner:
try:
owner = await self.bot.get_user_info(self.bot.settings.owner)
except:
owner = None
if not owner:
owner = "Unknown"
about = (
"This is an instance of [Red, an open source Discord bot]({}) "
"created by [Twentysix]({}) and improved by many.\n\n"
"Red is backed by a passionate community who contributes and "
"creates content for everyone to enjoy. [Join us today]({}) "
"and help us improve!\n\n"
"".format(red_repo, author_repo, server_url))
embed = discord.Embed(colour=discord.Colour.red())
embed.add_field(name="Instance owned by", value=str(owner))
embed.add_field(name="Python", value=py_version)
embed.add_field(name="discord.py", value=dpy_version)
embed.add_field(name="About Red", value=about, inline=False)
embed.set_footer(text="Bringing joy since 02 Jan 2016 (over "
"{} days ago!)".format(days_since))
try:
await self.bot.say(embed=embed)
except discord.HTTPException:
await self.bot.say("I need the `Embed links` permission "
"to send this")
def planifie(channel_obj: discord.Channel = None):
now = int(time.time())
thisDay = now - (now % 86400)
seconds_left = 86400 - (now - thisDay)
multiplicator = round(seconds_left / 86400, 5)
if not channel_obj:
logger.debug("Replanning")
commons.bread = defaultdict(int)
planification_ = {}
if multiplicator == 0:
multiplicator = 1
servers = prefs.JSONloadFromDisk("channels.json")
for server_ in list(servers.keys()):
server = bot.get_server(str(server_))
if not server:
logger.debug("Non-existant server: " + str(server_))
servers.pop(server_)
scores.delServerPlayers(sid=server_)
elif not "channels" in servers[server.id]:
await comm.logwithinfos(server.default_channel, log_str="Server not configured: " + server.id)
try:
await bot.send_message(server, "The bot is not configured properly, please check the config or contact Eyesofcreeper#4758 | https://discord.gg/2BksEkV")
await comm.logwithinfos(server.default_channel, log_str="Unconfigured message sent...")
except:
await comm.logwithinfos(server.default_channel, log_str="Error sending the unconfigured message to the default channel on the server.")
else:
for channel_ in servers[server.id]["channels"]:
channel = server.get_channel(str(channel_))
if channel:
permissions = channel.permissions_for(server.me)
if permissions.read_messages and permissions.send_messages:
# logger.debug("Adding channel: {id} ({ducks_per_day} c/j)".format(**{
# "id" : channel.id,
# "ducks_per_day": prefs.getPref(server, "ducks_per_day")
# }))
planification_[channel] = round(prefs.getPref(server, "ducks_per_day") * multiplicator)
else:
await comm.logwithinfos(channel, log_str="Error adding channel to planification: no read/write permissions!")
else:
pass
commons.ducks_planned = planification_ # {"channel":[time objects]}
prefs.JSONsaveToDisk(servers, "channels.json")
else:
commons.bread[channel_obj] = 0
permissions = channel_obj.permissions_for(channel_obj.server.me)
if permissions.read_messages and permissions.send_messages:
pass
else:
await comm.logwithinfos(channel_obj, log_str="Error adding channel to planification: no read/write permissions!")
commons.ducks_planned[channel_obj] = round(prefs.getPref(channel_obj.server, "ducks_per_day") * multiplicator)
def cleanup_servers(self, ctx):
language = prefs.getPref(ctx.message.server, "language")
await comm.message_user(ctx.message, _("Serching for servers to leave", language))
to_clean = []
total_members_lost = 0
servers = JSONloadFromDisk("channels.json")
for server in list(self.bot.servers):
try:
if len(servers[server.id]["channels"]) == 0:
to_clean.append(server)
total_members_lost += server.member_count
except KeyError: # Pas de channels ou une autre merde dans le genre ?
to_clean.append(server)
total_members_lost += server.member_count
def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
return ''.join(random.choice(chars) for _ in range(size))
random_str = id_generator()
await comm.message_user(ctx.message, _("Cleaning {servers} unused servers (accounting for {members} members in total)", language).format(servers=len(to_clean), members=total_members_lost))
await comm.message_user(ctx.message, _("To confirm, please type {random_str} now.", language).format(random_str=random_str))
def is_random_str(m):
return m.content == random_str
guess = await self.bot.wait_for_message(timeout=10.0, author=ctx.message.author, check=is_random_str)
if guess is None:
await comm.message_user(ctx.message, _(":x: Operation cancelled, you took too long to answer.", language))
else:
failed = 0
for server in to_clean:
try:
await self.bot.send_message(server, ":warning: I'm leaving the server, as you haven't configured me.\nJoin the DuckHunt server (https://discord.gg/2BksEkV) to get help with the setup and what you have to do to bring me back (and get me to stay), or check out https://api-d.com.")
except:
failed += 1
pass
try:
await self.bot.leave_server(server) # Good Bye :'(
except:
commons.logger.exception("")
await comm.message_user(ctx.message, _(":ok: Finished, failed for {failed} servers.", language).format(failed=failed))
# await self.bot.leave_server(server)
def about(self, ctx):
"""Info about bot."""
cmd = r'git log -3 --pretty="[{}](https://github.com/khazhyk/dango.py/commit/%H) %s (%ar)"'
if os.name == "posix":
cmd = cmd.format(r'\`%h\`')
else:
cmd = cmd.format('`%h`')
stdout, _ = await utils.run_subprocess(cmd)
embed = discord.Embed(description='Latest Changes:\n' + stdout)
embed.title = "spoo.py Server Invite"
embed.url = "https://discord.gg/0j3CB6tlXwou6Xb1"
embed.color = 0xb19bd9
embed.set_author(
name=ctx.bot.user.name, icon_url=ctx.bot.user.avatar_url)
embed.set_thumbnail(url=ctx.bot.user.avatar_url)
servers = len(ctx.bot.guilds)
members = sum(len(g.members) for g in ctx.bot.guilds)
members_online = sum(1 for g in ctx.bot.guilds
for m in g.members
if m.status != discord.Status.offline)
text_channels = sum(len(g.text_channels) for g in ctx.bot.guilds)
voice_channels = sum(len(g.voice_channels) for g in ctx.bot.guilds)
memory = psutil.Process(os.getpid()).memory_full_info().rss / (1024 * 1024)
# messages = 10
# commands = 10
embed.add_field(
name="Members",
value="%d total\n%d online" % (members, members_online))
embed.add_field(
name="Channels",
value="%d text\n%d voice" % (text_channels, voice_channels))
embed.add_field(name="Servers", value=servers)
embed.add_field(name="Process", value="%.2fMiB RSS\n%s Uptime" % (memory, uptime()))
embed.set_footer(text="dangopy | discord.py v{}".format(discord_version))
# embed.add_field(name="Messages", value="%d messages\n%d commands" % (messages, commands))
# embed.add_field(name="Shards", value=shard_id(ctx.bot))
await ctx.send(embed=embed)