python - 不和谐.py | Sqlite 邀请记录器
问题描述
我在 sqlite 中创建了一个邀请记录器,现在这是我的update_total
功能
async def update_totals(self, member):
invites = await member.guild.invites()
c = datetime.today().strftime("%Y-%m-%d").split("-")
c_y = int(c[0])
c_m = int(c[1])
c_d = int(c[2])
async with self.bot.db.execute("SELECT id, uses FROM invites WHERE guild_id = ?", (member.guild.id,)) as cursor:
async for invite_id, old_uses in cursor:
for invite in invites:
if invite.id == invite_id and invite.uses - old_uses > 0:
if not (c_y == member.created_at.year and c_m == member.created_at.month and c_d - member.created_at.day < 7):
print(invite.id)
await self.bot.db.execute("UPDATE invites SET uses = uses + 1 WHERE guild_id = ? AND id = ?", (invite.guild.id, invite.id))
await self.bot.db.execute("INSERT OR IGNORE INTO joined (guild_id, inviter_id, joiner_id) VALUES (?,?,?)", (invite.guild.id, invite.inviter.id, member.id))
await self.bot.db.execute("UPDATE totals SET normal = normal + 1 WHERE guild_id = ? AND inviter_id = ?", (invite.guild.id, invite.inviter.id))
else:
await self.bot.db.execute("UPDATE totals SET normal = normal + 1, fake = fake + 1 WHERE guild_id = ? and inviter_id = ?", (invite.guild.id, invite.inviter.id))
return
这是我的on_member_join
活动
@commands.Cog.listener()
async def on_member_join(self, member):
await self.update_totals(member)
await self.bot.db.commit()
inviter = await self.tracker.fetch_inviter(member)
cur = await self.bot.db.execute("SELECT normal, left, fake FROM totals WHERE guild_id = ? AND inviter_id = ?", (member.guild.id, inviter.id))
res = await cur.fetchone()
if res is None:
normal, left, fake = 0, 0, 0
else:
normal, left, fake = res
total = normal - (left + fake)
embed = discord.Embed(title=f'Welcome To {member.guild.name}!', description=f'**{member.mention} Was Invited By {inviter.mention}!**\n**{inviter.name}#{inviter.discriminator}** Now Has ``{total} Invites``', timestamp=datetime.now())
embed.set_footer(text = f'Invited By {inviter.name}', icon_url=member.avatar_url)
channel = discord.utils.get(member.guild.channels, name = 'general')
await channel.send(embed=embed)
这是我的setup
功能
async def setup(self):
await self.bot.wait_until_ready()
self.bot.db = await aiosqlite.connect("inviteData.db")
await self.bot.db.execute("CREATE TABLE IF NOT EXISTS totals (guild_id int, inviter_id int, normal int, left int, fake int, PRIMARY KEY (guild_id, inviter_id))")
await self.bot.db.execute("CREATE TABLE IF NOT EXISTS invites (guild_id int, id string, uses int, PRIMARY KEY (guild_id, id))")
await self.bot.db.execute("CREATE TABLE IF NOT EXISTS joined (guild_id int, inviter_id int, joiner_id int, PRIMARY KEY (guild_id, inviter_id, joiner_id))")
for guild in self.bot.guilds:
for invite in await guild.invites():
await self.bot.db.execute("INSERT OR IGNORE INTO invites (guild_id, id, uses) VALUES (?,?,?)", (invite.guild.id, invite.id, invite.uses))
await self.bot.db.execute("INSERT OR IGNORE INTO totals (guild_id, inviter_id, normal, left, fake) VALUES (?,?,?,?,?)", (guild.id, invite.inviter.id, 0, 0, 0))
await self.bot.db.commit()
这是我的命令,它使用 unbelievaboat api 为用户余额增加了一些钱
@commands.command()
@commands.has_permissions(administrator=True)
async def add_money(self, ctx, member: discord.Member=None, amount: int=None):
if member is None: member == ctx.author
if amount is None:
await ctx.send(f'You have to type the amount you want to add')
return
else:
#Gives a member some money
await self.bot.pizza.patch_user_balance(ctx.guild.id, member.id, bank=amount, reason="add_money command")
现在我该如何实现这一点,只要真人加入而不是假的或重新加入,它就会向邀请者添加 1 个硬币
解决方案
推荐阅读
- javascript - 如何在javascript中以同心方形方式排列矩阵中的关系?
- python - Seaborn 的配对图似乎在对角线图上有缩放问题
- python - 从父文件夹导入模块的最简单方法?
- c# - 通过知道 typeName 和 contorl name 获取控件属性
- javascript - 将实例分配给我的数组(javascript)。是什么导致了这个错误?
- sql - 使用游标循环将 PL SQL 函数转换为 T-SQL 并获取
- android - 当 Widget 进入视图(未创建)时如何调用函数?
- javascript - 节点中的promise函数无法获取返回值
- excel - 在命名范围内选择使用的行?
- python - 如何在 Python 中将变量转换为 denary?