added auto proxy
This commit is contained in:
parent
0a59132329
commit
962ff117ed
16 changed files with 238 additions and 33 deletions
|
@ -4,8 +4,7 @@ import { MemberRepo } from "../repositories/MemberRepo"
|
||||||
|
|
||||||
export async function avatarMemberChange(userId: string, args: string[], database: Database){
|
export async function avatarMemberChange(userId: string, args: string[], database: Database){
|
||||||
const memberRepo = new MemberRepo(database);
|
const memberRepo = new MemberRepo(database);
|
||||||
let userAlters : MemberModel[] = [];
|
const userAlters : MemberModel[] = memberRepo.getAltersByUserId(userId)
|
||||||
await memberRepo.getAltersByUserId(userId).then( result => userAlters = result )
|
|
||||||
|
|
||||||
let userAltersNames : string[] = [];
|
let userAltersNames : string[] = [];
|
||||||
userAlters.forEach(alter => userAltersNames.push(alter.name));
|
userAlters.forEach(alter => userAltersNames.push(alter.name));
|
||||||
|
|
|
@ -10,8 +10,7 @@ async function colorMemberChange(userId: string, args: string[], database: Datab
|
||||||
const alterName = args[0];
|
const alterName = args[0];
|
||||||
const alterColor = args[1];
|
const alterColor = args[1];
|
||||||
|
|
||||||
let alters: MemberModel[];
|
const alters: MemberModel[] = memberRepo.getAltersByUserId(userId) // fetching alters from user.
|
||||||
await memberRepo.getAltersByUserId(userId).then( result => alters = result ) // fetching alters from user.
|
|
||||||
if (alters.length == 0) return "This user has no Members." // checking if returned array is at least not 0, if len 0, then return.
|
if (alters.length == 0) return "This user has no Members." // checking if returned array is at least not 0, if len 0, then return.
|
||||||
|
|
||||||
let alterToEdit: MemberModel;
|
let alterToEdit: MemberModel;
|
||||||
|
|
|
@ -12,8 +12,7 @@ async function createMember(userId: string, args: string[], database: Database){
|
||||||
profile_pic_url: "https://tse3.mm.bing.net/th?id=OIP.yte7rRnbCnWi1giriwTOvwHaHa&pid=15.1"
|
profile_pic_url: "https://tse3.mm.bing.net/th?id=OIP.yte7rRnbCnWi1giriwTOvwHaHa&pid=15.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
let userAlters: MemberModel[];
|
const userAlters: MemberModel[] = memberRepo.getAltersByUserId(userId)
|
||||||
await memberRepo.getAltersByUserId(userId).then(result => userAlters = result)
|
|
||||||
|
|
||||||
let alterTags : string[] = [];
|
let alterTags : string[] = [];
|
||||||
userAlters.forEach( alter => {
|
userAlters.forEach( alter => {
|
||||||
|
|
|
@ -7,8 +7,7 @@ export async function deleteMember(userId: string, args: string[], database: Dat
|
||||||
let success: boolean = false;
|
let success: boolean = false;
|
||||||
|
|
||||||
if (args.length === 1) {
|
if (args.length === 1) {
|
||||||
let alters: MemberModel[];
|
const alters: MemberModel[] = memberRepo.getAltersByUserId(userId)
|
||||||
await memberRepo.getAltersByUserId(userId).then(result => alters = result )
|
|
||||||
alters.forEach(alter => {
|
alters.forEach(alter => {
|
||||||
if (alter.name == args[0]) {
|
if (alter.name == args[0]) {
|
||||||
memberRepo.delete(alter.id)
|
memberRepo.delete(alter.id)
|
||||||
|
|
|
@ -11,5 +11,8 @@ export function returnHelpText() {
|
||||||
"- avatar <'Member's name'> <'picture url'> | Allows you to edit your Member's profile picture\n" +
|
"- avatar <'Member's name'> <'picture url'> | Allows you to edit your Member's profile picture\n" +
|
||||||
"- color <'Member's name'> <'color hex'> | Allows you to change the color of your Member ( may be integrated with the future website )\n"+
|
"- color <'Member's name'> <'color hex'> | Allows you to change the color of your Member ( may be integrated with the future website )\n"+
|
||||||
"### Migrations\n"+
|
"### Migrations\n"+
|
||||||
"- tupper < Json file attached > | Migrates your Member from tupper"
|
"- tupper < Json file attached > | Migrates your Member from tupper\n"
|
||||||
|
+"### Auto proxy\n"
|
||||||
|
+"- setAutoProxy <member name> | Sets the member to automatically send messages as\n"
|
||||||
|
+"- toggleAutoProxy | Enable or disable the autoproxy"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,7 @@ import MemberModel from "../models/MemberModel";
|
||||||
|
|
||||||
async function listMember(userId: string, database: Database) {
|
async function listMember(userId: string, database: Database) {
|
||||||
const memberRepo = new MemberRepo(database);
|
const memberRepo = new MemberRepo(database);
|
||||||
let alters: MemberModel[];
|
const alters: MemberModel[] = memberRepo.getAltersByUserId(userId)
|
||||||
await memberRepo.getAltersByUserId(userId).then(result => { alters = result })
|
|
||||||
|
|
||||||
if (alters.length > 0 ) {
|
if (alters.length > 0 ) {
|
||||||
return tableConstructor(alters)
|
return tableConstructor(alters)
|
||||||
|
|
30
src/commands/setAutoProxy.ts
Normal file
30
src/commands/setAutoProxy.ts
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
import Database from "bun:sqlite";
|
||||||
|
import { MemberRepo } from "repositories/MemberRepo";
|
||||||
|
import UserRepo from "repositories/UserRepo";
|
||||||
|
import UserModel from "models/UserModel";
|
||||||
|
|
||||||
|
function setAutoProxy(author_id: string, args: string[], database: Database) {
|
||||||
|
|
||||||
|
if (args.length != 1) {return 0}
|
||||||
|
|
||||||
|
const memberRepo = new MemberRepo(database);
|
||||||
|
const userRepo = new UserRepo(database);
|
||||||
|
|
||||||
|
const member = memberRepo.getByName(args[0], author_id);
|
||||||
|
if (member == null) {return 1}
|
||||||
|
|
||||||
|
if (
|
||||||
|
userRepo.getIdByRevoltId(author_id)
|
||||||
|
){
|
||||||
|
const user_model: UserModel = {
|
||||||
|
"revolt_id": author_id,
|
||||||
|
"autoProxy": false
|
||||||
|
}
|
||||||
|
userRepo.new(user_model)
|
||||||
|
}
|
||||||
|
|
||||||
|
const bot_user_id = userRepo.getIdByRevoltId(author_id)
|
||||||
|
userRepo.setSelectedAutoProxyId(member.id, bot_user_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default setAutoProxy
|
25
src/commands/toggleAutoProxy.ts
Normal file
25
src/commands/toggleAutoProxy.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import Database from "bun:sqlite"
|
||||||
|
import UserModel from "models/UserModel"
|
||||||
|
import UserRepo from "repositories/UserRepo"
|
||||||
|
|
||||||
|
function toggleAutoProxy(revolt_id: string, database: Database) {
|
||||||
|
const userRepo = new UserRepo(database)
|
||||||
|
|
||||||
|
if (userRepo.getById(
|
||||||
|
userRepo.getIdByRevoltId(revolt_id)
|
||||||
|
) == null){
|
||||||
|
const model: UserModel = {
|
||||||
|
"revolt_id": revolt_id,
|
||||||
|
"autoProxy": false,
|
||||||
|
}
|
||||||
|
userRepo.new(model)
|
||||||
|
}
|
||||||
|
const user_id = userRepo.getIdByRevoltId(revolt_id)
|
||||||
|
const is_enabled = userRepo.isProxyEnabled(
|
||||||
|
userRepo.getIdByRevoltId(revolt_id)
|
||||||
|
)
|
||||||
|
|
||||||
|
userRepo.setProxyStatus(user_id, !is_enabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default toggleAutoProxy
|
|
@ -1,8 +1,8 @@
|
||||||
interface UserModel {
|
interface UserModel {
|
||||||
id: number,
|
id?: number,
|
||||||
revolt_id: string,
|
revolt_id: string,
|
||||||
autoProxy: boolean,
|
autoProxy: boolean,
|
||||||
autoProxyMember: number
|
autoProxyMember?: number
|
||||||
}
|
}
|
||||||
|
|
||||||
export default UserModel;
|
export default UserModel;
|
||||||
|
|
|
@ -8,12 +8,51 @@ export class MemberRepo {
|
||||||
this.db = database_instance;
|
this.db = database_instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
async getAltersByUserId(userId : string) : Promise<MemberModel[]> {
|
getById(member_id: number): MemberModel {
|
||||||
|
const row: any = this.db.query("SELECT * FROM members WHERE members.id=?")
|
||||||
|
.get(member_id)
|
||||||
|
|
||||||
|
const mapped_row: MemberModel = {
|
||||||
|
"id": row.id,
|
||||||
|
"name": row.name,
|
||||||
|
"prefix": row.prefix,
|
||||||
|
"owner": row.owner,
|
||||||
|
"profile_pic_url": row.profile_pic_url
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapped_row
|
||||||
|
}
|
||||||
|
|
||||||
|
getByName(name: string, user_id: string) {
|
||||||
|
if (name == null || user_id == null) {return null}
|
||||||
|
|
||||||
|
const query = this.db.query(`
|
||||||
|
SELECT *
|
||||||
|
FROM members
|
||||||
|
WHERE members.name=?
|
||||||
|
AND members.owner=?
|
||||||
|
`)
|
||||||
|
|
||||||
|
const row: any = query.get(name, user_id)
|
||||||
|
if (row == null) {return null}
|
||||||
|
|
||||||
|
const mapped_row: MemberModel = {
|
||||||
|
"id": row.id,
|
||||||
|
"name": row.name,
|
||||||
|
"prefix": row.prefix,
|
||||||
|
"owner": row.owner,
|
||||||
|
"profile_pic_url": row.profile_pic_url
|
||||||
|
}
|
||||||
|
|
||||||
|
return mapped_row
|
||||||
|
}
|
||||||
|
|
||||||
|
getAltersByUserId(userId : string) : MemberModel[] {
|
||||||
const query = this.db.query("SELECT * FROM members WHERE members.owner=?")
|
const query = this.db.query("SELECT * FROM members WHERE members.owner=?")
|
||||||
|
|
||||||
let result: MemberModel[] = query.all(userId).map( (row: any) => {
|
let result: MemberModel[] = query.all(userId).map( (row: any) => {
|
||||||
const mapped_row: MemberModel = {
|
const mapped_row: MemberModel = {
|
||||||
id: row.id,
|
"id": row.id,
|
||||||
"name": row.name,
|
"name": row.name,
|
||||||
"prefix": row.prefix,
|
"prefix": row.prefix,
|
||||||
"owner": row.owner,
|
"owner": row.owner,
|
||||||
|
@ -37,5 +76,4 @@ export class MemberRepo {
|
||||||
delete(alterId: number) {
|
delete(alterId: number) {
|
||||||
this.db.query("DELETE FROM members WHERE members.id=?").run(alterId)
|
this.db.query("DELETE FROM members WHERE members.id=?").run(alterId)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,18 +9,33 @@ class UserRepo {
|
||||||
}
|
}
|
||||||
|
|
||||||
getById(id) {
|
getById(id) {
|
||||||
const row = this.db.run(`
|
const row: any = this.db.query(`
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM users
|
FROM users
|
||||||
WHERE users.id = ?
|
WHERE users.id = ?
|
||||||
`, [id])
|
`).get(id)
|
||||||
|
if (row != null){
|
||||||
|
return row.id
|
||||||
|
}
|
||||||
|
|
||||||
return row
|
return null
|
||||||
|
}
|
||||||
|
new(model: UserModel) {
|
||||||
|
this.db.query(`
|
||||||
|
INSERT INTO users (revolt_id, auto_proxy) values ( ?, ? )
|
||||||
|
`)
|
||||||
|
.run(model.revolt_id, model.autoProxy)
|
||||||
|
}
|
||||||
|
delete(id) {
|
||||||
|
this.db.query(`
|
||||||
|
DELETE *
|
||||||
|
FROM users
|
||||||
|
WHERE users.id=?
|
||||||
|
`).run(id)
|
||||||
}
|
}
|
||||||
new(model: UserModel) {}
|
|
||||||
delete(id) {}
|
|
||||||
|
|
||||||
isProxyEnabled(id: number) {
|
isProxyEnabled(id: number) {
|
||||||
|
if (id == null) { return false }
|
||||||
const row: any = this.db.query(`
|
const row: any = this.db.query(`
|
||||||
SELECT auto_proxy
|
SELECT auto_proxy
|
||||||
FROM users
|
FROM users
|
||||||
|
@ -33,15 +48,41 @@ class UserRepo {
|
||||||
return is_enabled
|
return is_enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
getIdByRevoltId(revolt_id: string){
|
setProxyStatus(id: number, status: boolean) {
|
||||||
|
const string_status = status == true ? "TRUE" : "FALSE"
|
||||||
|
this.db.query("UPDATE users SET auto_proxy=? WHERE users.id=?").run(string_status, id)
|
||||||
|
}
|
||||||
|
|
||||||
|
getIdByRevoltId(revolt_id: string): number | null {
|
||||||
const row: any = this.db.query(`
|
const row: any = this.db.query(`
|
||||||
SELECT id
|
SELECT id
|
||||||
FROM users
|
FROM users
|
||||||
WHERE users.revolt_id=?
|
WHERE users.revolt_id=?
|
||||||
`).get(revolt_id)
|
`).get(revolt_id)
|
||||||
|
|
||||||
const id: number = row.id
|
if (row != null) {
|
||||||
return id
|
const id: number = row.id
|
||||||
|
return id
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
setSelectedAutoProxyId(id: number, user_id: number){
|
||||||
|
const query = this.db.query(`
|
||||||
|
UPDATE users
|
||||||
|
SET auto_proxy_member=?
|
||||||
|
WHERE users.id=?
|
||||||
|
`).run(id, user_id)
|
||||||
|
}
|
||||||
|
|
||||||
|
getSelectedAutoProxyIdByUserId(id: number) {
|
||||||
|
const row: any = this.db.query(`
|
||||||
|
SELECT auto_proxy_member
|
||||||
|
FROM users
|
||||||
|
WHERE users.id=?
|
||||||
|
`).get(id)
|
||||||
|
|
||||||
|
return row.auto_proxy_member
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,12 @@ function checkAutoProxy
|
||||||
(
|
(
|
||||||
userId: string,
|
userId: string,
|
||||||
database: Database
|
database: Database
|
||||||
)
|
): boolean
|
||||||
{
|
{
|
||||||
const repo = new UserRepo(database)
|
const repo = new UserRepo(database);
|
||||||
const user_id = repo.getIdByRevoltId(userId)
|
const user_id = repo.getIdByRevoltId(userId);
|
||||||
const is_enabled = repo.isProxyEnabled(user_id)
|
const is_enabled = repo.isProxyEnabled(user_id);
|
||||||
|
|
||||||
return is_enabled
|
return is_enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ import { deleteMember } from "../commands/deleteMember"
|
||||||
import { avatarMemberChange } from "../commands/avatarMemberChange"
|
import { avatarMemberChange } from "../commands/avatarMemberChange"
|
||||||
import colorMemberChange from "../commands/colorMemberChange"
|
import colorMemberChange from "../commands/colorMemberChange"
|
||||||
import migrationCommand from "../commands/migrateMember"
|
import migrationCommand from "../commands/migrateMember"
|
||||||
|
import toggleAutoProxy from "commands/toggleAutoProxy"
|
||||||
|
import setAutoProxy from "commands/setAutoProxy"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,6 +42,25 @@ export async function commandHandler(message : Message, db: Database, _prefix :
|
||||||
await message.reply(await avatarMemberChange(message.author.id, args, db));
|
await message.reply(await avatarMemberChange(message.author.id, args, db));
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
case "setAutoProxy": {
|
||||||
|
const status = setAutoProxy(message.author.id, args, db);
|
||||||
|
switch(status) {
|
||||||
|
case 0: {
|
||||||
|
await message.reply("not enough arguments")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
message.reply("no member found with that member name")
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
case "toggleAutoProxy": {
|
||||||
|
toggleAutoProxy(message.author.id, db)
|
||||||
|
await message.reply("toggled")
|
||||||
|
break
|
||||||
|
}
|
||||||
case "color" : {
|
case "color" : {
|
||||||
await message.reply(await colorMemberChange(message.author.id, args, db));
|
await message.reply(await colorMemberChange(message.author.id, args, db));
|
||||||
break
|
break
|
||||||
|
|
|
@ -2,8 +2,15 @@ import { Message } from "revolt.js"
|
||||||
import { Database } from "bun:sqlite";
|
import { Database } from "bun:sqlite";
|
||||||
import sendAsMember from "./sendAsMemberHandler";
|
import sendAsMember from "./sendAsMemberHandler";
|
||||||
import checkAutoProxy from "./checkAutoProxy";
|
import checkAutoProxy from "./checkAutoProxy";
|
||||||
|
import sendAsAutoProxyMember from "./sendAsAutoProxyMember";
|
||||||
|
|
||||||
export async function nonCommandHandler(message : Message, database: Database){
|
export async function nonCommandHandler(message : Message, database: Database){
|
||||||
await sendAsMember(message, database);
|
const should_auto_proxy = checkAutoProxy(message.author.id, database)
|
||||||
checkAutoProxy(message.author.id, database)
|
|
||||||
|
if (should_auto_proxy) {
|
||||||
|
await sendAsAutoProxyMember(message.author.id, message, database)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await sendAsMember(message, database);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
45
src/utils/sendAsAutoProxyMember.ts
Normal file
45
src/utils/sendAsAutoProxyMember.ts
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
import Database from "bun:sqlite";
|
||||||
|
import { Message } from "revolt.js"
|
||||||
|
import { MemberRepo } from "repositories/MemberRepo";
|
||||||
|
import UserRepo from "repositories/UserRepo";
|
||||||
|
import MemberModel from "models/MemberModel";
|
||||||
|
|
||||||
|
async function sendAsAutoProxyMember(revolt_uid: string, message: Message, database: Database) {
|
||||||
|
// assumes that every check has been done previously
|
||||||
|
|
||||||
|
const userRepo = new UserRepo(database)
|
||||||
|
const memberRepo = new MemberRepo(database)
|
||||||
|
|
||||||
|
const user_id = userRepo.getIdByRevoltId(revolt_uid)
|
||||||
|
const auto_proxy_id = userRepo.getSelectedAutoProxyIdByUserId(user_id)
|
||||||
|
|
||||||
|
const member_to_proxy_as: MemberModel = memberRepo.getById(auto_proxy_id)
|
||||||
|
const replyIds: string[] | undefined = message.replyIds;
|
||||||
|
let replies: any[] = [];
|
||||||
|
|
||||||
|
if (replyIds !== undefined) {
|
||||||
|
replyIds.forEach( replyId => {
|
||||||
|
replies.push({
|
||||||
|
id: replyId,
|
||||||
|
mention: false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
await message.channel.sendMessage({
|
||||||
|
content: message.content,
|
||||||
|
masquerade: {
|
||||||
|
name: member_to_proxy_as.name ,
|
||||||
|
},
|
||||||
|
replies: replies
|
||||||
|
})
|
||||||
|
await message.delete();
|
||||||
|
}
|
||||||
|
catch(e){
|
||||||
|
console.log(e)
|
||||||
|
await message.channel.sendMessage("Error: PluralCake requires at least these permissions: \n- Masquerade permissions. \n- Message editing permissions.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default sendAsAutoProxyMember
|
|
@ -5,8 +5,7 @@ import MemberModel from "../models/MemberModel"
|
||||||
|
|
||||||
export default async function sendAsMember(message: Message, database: Database) {
|
export default async function sendAsMember(message: Message, database: Database) {
|
||||||
const memberRepo: MemberRepo = new MemberRepo(database);
|
const memberRepo: MemberRepo = new MemberRepo(database);
|
||||||
let members: MemberModel[];
|
let members: MemberModel[] = memberRepo.getAltersByUserId(message.author.id);
|
||||||
await memberRepo.getAltersByUserId(message.author.id).then(result => members = result);
|
|
||||||
|
|
||||||
members.forEach( async alter => {
|
members.forEach( async alter => {
|
||||||
const pre_prefix = alter.prefix.split("text");
|
const pre_prefix = alter.prefix.split("text");
|
||||||
|
|
Loading…
Reference in a new issue