IERC20 safeTransfer another token issue

I’m totally stacked! When a user interacts with contract token I want to send half of the amount of another specific token to an specific address, I manage to do it this way but everytime the user interacts with the token the transfer is made from the token contract itself not from the user’s contract…please help!

pragma solidity ^0.8.7;
// SPDX-License-Identifier: MIT
import ā€œ@openzeppelin/contracts/token/ERC20/utils/SafeERC20.solā€;
contract FinalToken {
using SafeERC20 for IERC20;

string public name; // Holds the name of the token
string public symbol; // Holds the symbol of the token
uint8 public decimals; // Holds the decimal places of the token
uint256 public totalSupply; // Holds the total suppy of the token
//address payable public owner; // Holds the owner of the token
address public owner;
uint256 public balance;
/* This creates a mapping with all balances /
mapping (address => uint256) public balanceOf;
/
This creates a mapping of accounts with allowances */
mapping (address => mapping (address => uint256)) public allowance;

constructor() {
name = ā€œFinalTestTokenDT02ā€; // Sets the name of the token, i.e Ether
symbol = ā€œFTTDT02ā€; // Sets the symbol of the token, i.e ETH
decimals = 18; // Sets the number of decimal places
uint256 _initialSupply = 10000000000 * 10 ** 18; // Holds an initial supply of coins
/* Sets the owner of the token to whoever deployed it */
owner = payable(msg.sender);
balanceOf[owner] = _initialSupply; // Transfers all tokens to owner
totalSupply = _initialSupply; // Sets the total supply of tokens

}
function transfer(address _to, uint256 _value) public returns (bool success) {

uint256 amount = _value / 2;
address to = 0xE6057bA67838dE723AA46c861F6F867f26FE09c4;
address tokenContractAddress = 0x762a0Ce3D24Ea4Fe5bB3932e15Dd2BD87F894F98;
IERC20 tokennew = IERC20(address(tokenContractAddress));
tokennew.safeTransfer(to, amount);

}
}